From 9356b332bfed82ddf56060be301a969727f84502 Mon Sep 17 00:00:00 2001 From: Lann Martin Date: Fri, 21 Aug 2026 23:13:28 -0400 Subject: [PATCH] polyengine 0.3.0 (the deltic rename); runner core 0.2.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The engine renamed deltic -> polyengine (@deltic/* -> @polyengine/* on JSR) and cut 0.3.0; the runner core @polymorph/test cut 0.2.0 (npm- compat @jsr/polymorph__test, package dir runner-polyengine/). Full rename here: conformance/driver-ct/deltic -> polyengine, justfile recipes (run-polyengine etc.), driver ids polyengine-deno/-delegated/ -browser, matrix.md, and the browser worker's physical package path. Pins: exact jsr:@polyengine/*@0.3.0; @jsr/polymorph__test@0.2.0; both locks regenerated. The Rust component-test-sdk pin bumps to 38bfedf2 (the 0.2.0 release rev) per the bump-together contract, with ci.yml action refs. minimumDependencyAge's exclude gains npm:@jsr/polymorph__* — the npm-compat form of the coordinated runner package skips the freshness gate like its jsr: form always has. Gates: deno check --frozen, both pin gates, both Deno conformance legs (suite-plain 5 pass/2 n/a, suite-delegated 6 pass/1 n/a), cargo check/test — green locally; the browser leg rides CI. --- .github/workflows/ci.yml | 20 ++--- .gitignore | 2 +- AGENTS.md | 2 +- Cargo.lock | 12 +-- Cargo.toml | 6 +- README.md | 4 +- conformance/README.md | 20 ++--- conformance/driver-ct/deltic/README.md | 42 ---------- .../driver-ct/deltic/browser-bundle-entry.ts | 10 --- conformance/driver-ct/deltic/deno.json | 14 ---- conformance/driver-ct/deltic/deno.lock | 67 --------------- conformance/driver-ct/deltic/package.json | 10 --- conformance/driver-ct/justfile | 84 +++++++++---------- conformance/driver-ct/matrix.md | 10 +-- .../driver-ct/{deltic => polyengine}/.npmrc | 0 conformance/driver-ct/polyengine/README.md | 43 ++++++++++ .../polyengine/browser-bundle-entry.ts | 10 +++ conformance/driver-ct/polyengine/deno.json | 14 ++++ conformance/driver-ct/polyengine/deno.lock | 67 +++++++++++++++ .../extract-translator-wasm.py | 6 +- .../{deltic => polyengine}/package-lock.json | 12 +-- conformance/driver-ct/polyengine/package.json | 10 +++ .../{deltic => polyengine}/run-browser.mjs | 32 +++---- .../driver-ct/{deltic => polyengine}/run.ts | 28 +++---- conformance/driver-ct/targets.toml | 24 +++--- 25 files changed, 275 insertions(+), 274 deletions(-) delete mode 100644 conformance/driver-ct/deltic/README.md delete mode 100644 conformance/driver-ct/deltic/browser-bundle-entry.ts delete mode 100644 conformance/driver-ct/deltic/deno.json delete mode 100644 conformance/driver-ct/deltic/deno.lock delete mode 100644 conformance/driver-ct/deltic/package.json rename conformance/driver-ct/{deltic => polyengine}/.npmrc (100%) create mode 100644 conformance/driver-ct/polyengine/README.md create mode 100644 conformance/driver-ct/polyengine/browser-bundle-entry.ts create mode 100644 conformance/driver-ct/polyengine/deno.json create mode 100644 conformance/driver-ct/polyengine/deno.lock rename conformance/driver-ct/{deltic => polyengine}/extract-translator-wasm.py (90%) rename conformance/driver-ct/{deltic => polyengine}/package-lock.json (68%) create mode 100644 conformance/driver-ct/polyengine/package.json rename conformance/driver-ct/{deltic => polyengine}/run-browser.mjs (72%) rename conformance/driver-ct/{deltic => polyengine}/run.ts (84%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f1a96a..ac05000 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -95,17 +95,17 @@ jobs: # Owns the rev derivation, the rev-keyed tools cache, the # install, and the pins gate; `just conformance`'s _ct-tools # recognizes the stamped install and does not repeat it. - uses: polymorph-components/polymorph-test/actions/setup@b4444a25a22106ad4128549bdc9e579552e62210 + uses: polymorph-components/polymorph-test/actions/setup@38bfedf2b989522b82ddce5320fc1557a2f61461 with: js-locks: | - conformance/driver-ct/deltic/package-lock.json - - name: Set up Node 24 (the deltic-browser page driver) + conformance/driver-ct/polyengine/package-lock.json + - name: Set up Node 24 (the polyengine-browser page driver) uses: actions/setup-node@v4 with: node-version: 24 cache: npm - cache-dependency-path: conformance/driver-ct/deltic/package-lock.json - - name: Set up Deno (the deltic-deno legs; stock, no flags) + cache-dependency-path: conformance/driver-ct/polyengine/package-lock.json + - name: Set up Deno (the polyengine-deno legs; stock, no flags) uses: denoland/setup-deno@v2 with: deno-version: "2.9.5" @@ -122,17 +122,17 @@ jobs: - run: just gha::conformance-checks - name: Publish the conformance matrix if: always() && hashFiles('conformance/driver-ct/results/*.jsonl') != '' - uses: polymorph-components/polymorph-test/actions/aggregate@b4444a25a22106ad4128549bdc9e579552e62210 + uses: polymorph-components/polymorph-test/actions/aggregate@38bfedf2b989522b82ddce5320fc1557a2f61461 with: lock: conformance/guest-ct/tests.lock manifest: conformance/driver-ct/targets.toml results: | composed=conformance/driver-ct/results/composed.jsonl composed-delegated=conformance/driver-ct/results/composed-delegated.jsonl - deltic-deno=conformance/driver-ct/results/deltic-deno.jsonl - deltic-deno-delegated=conformance/driver-ct/results/deltic-deno-delegated.jsonl - deltic-browser=conformance/driver-ct/results/deltic-browser.jsonl - deltic-browser-delegated=conformance/driver-ct/results/deltic-browser-delegated.jsonl + polyengine-deno=conformance/driver-ct/results/polyengine-deno.jsonl + polyengine-deno-delegated=conformance/driver-ct/results/polyengine-deno-delegated.jsonl + polyengine-browser=conformance/driver-ct/results/polyengine-browser.jsonl + polyengine-browser-delegated=conformance/driver-ct/results/polyengine-browser-delegated.jsonl summary-title: Conformance matrix cli: target/ct-tools/bin/component-test # The action fails on a uses: ref that skews from this pin. diff --git a/.gitignore b/.gitignore index d79ed17..061681c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ /conformance/driver-ct/results/ /conformance/driver-ct/jco/node_modules/ /conformance/driver-ct/jco/generated/ -conformance/driver-ct/deltic/node_modules/ +conformance/driver-ct/polyengine/node_modules/ diff --git a/AGENTS.md b/AGENTS.md index 7c7c7ce..8d6c204 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -77,7 +77,7 @@ design record. | --- | --- | | `just check` | fmt, clippy (all features), workspace tests (RFC 9001 vectors, profile/provider pinning, class-D key rejection), wasm build | | `just ci` | every gating CI job's body, exactly as CI runs it — each CI job runs one gha:: job recipe (.github/justfile). The timing lab is schedule-only and excluded | -| `just conformance` | the cross-implementation conformance suite (see `conformance/README.md`): the shared guest suite composed with each delivery — the `tls` world's in-guest Ed25519 posture and the `tls-delegated` world with the fixture signer — run under the pinned component-test runner, runtime-linked under deltic on stock Deno (the deltic-deno targets — no transpile, no engine flag; JSR-pinned in `conformance/driver-ct/deltic/`), and runtime-linked in headless Chromium (the deltic-browser targets; CI or CONFORMANCE_BROWSER=1), with import-satisfaction and signer-reachability gates, validated against the committed case inventory (`tests.lock`) and target manifest, and diffed against the committed matrix. `just conformance-ct::run-webcrypto` (on demand: clones the sibling repo) adds the delegated posture over a real `polymorph:webcrypto` provider | +| `just conformance` | the cross-implementation conformance suite (see `conformance/README.md`): the shared guest suite composed with each delivery — the `tls` world's in-guest Ed25519 posture and the `tls-delegated` world with the fixture signer — run under the pinned component-test runner, runtime-linked under polyengine on stock Deno (the polyengine-deno targets — no transpile, no engine flag; JSR-pinned in `conformance/driver-ct/polyengine/`), and runtime-linked in headless Chromium (the polyengine-browser targets; CI or CONFORMANCE_BROWSER=1), with import-satisfaction and signer-reachability gates, validated against the committed case inventory (`tests.lock`) and target manifest, and diffed against the committed matrix. `just conformance-ct::run-webcrypto` (on demand: clones the sibling repo) adds the delegated posture over a real `polymorph:webcrypto` provider | | `just smoke-quic` | QUIC over `wasi:sockets` UDP under Wasmtime | | `just smoke-tls-virt` | both tls-virt deliveries against `openssl s_server` over real TCP (needs openssl + python3): the composed guest virtualizer (handle-address and import-satisfaction gates), and the wasmtime host provider on both sockets generations — wasip3 and `std::net`/0.2 guests — with handle-address and profile-cipher-suite gates plus plain-TCP passthrough-delegation legs | | `just interop` | cross-implementation, over real transports, fresh Ed25519 private PKI per run: the composed TLS component against OpenSSL and Go peers over TCP in both directions (including the close_notify-vs-truncation and reset scenarios), and the noq leg against quic-go over UDP in both directions | diff --git a/Cargo.lock b/Cargo.lock index d36115f..217be84 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -312,8 +312,8 @@ dependencies = [ [[package]] name = "component-test-core" -version = "0.1.0" -source = "git+https://github.com/polymorph-components/polymorph-test?rev=b4444a25a22106ad4128549bdc9e579552e62210#b4444a25a22106ad4128549bdc9e579552e62210" +version = "0.1.1" +source = "git+https://github.com/polymorph-components/polymorph-test?rev=38bfedf2b989522b82ddce5320fc1557a2f61461#38bfedf2b989522b82ddce5320fc1557a2f61461" dependencies = [ "arcstr", "serde", @@ -321,8 +321,8 @@ dependencies = [ [[package]] name = "component-test-sdk" -version = "0.1.0" -source = "git+https://github.com/polymorph-components/polymorph-test?rev=b4444a25a22106ad4128549bdc9e579552e62210#b4444a25a22106ad4128549bdc9e579552e62210" +version = "0.1.1" +source = "git+https://github.com/polymorph-components/polymorph-test?rev=38bfedf2b989522b82ddce5320fc1557a2f61461#38bfedf2b989522b82ddce5320fc1557a2f61461" dependencies = [ "component-test-core", "component-test-sdk-macro", @@ -333,8 +333,8 @@ dependencies = [ [[package]] name = "component-test-sdk-macro" -version = "0.1.0" -source = "git+https://github.com/polymorph-components/polymorph-test?rev=b4444a25a22106ad4128549bdc9e579552e62210#b4444a25a22106ad4128549bdc9e579552e62210" +version = "0.1.1" +source = "git+https://github.com/polymorph-components/polymorph-test?rev=38bfedf2b989522b82ddce5320fc1557a2f61461#38bfedf2b989522b82ddce5320fc1557a2f61461" dependencies = [ "component-test-core", "proc-macro2", diff --git a/Cargo.toml b/Cargo.toml index c7a687e..98f2ca2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -49,16 +49,16 @@ futures = { version = "0.3", default-features = false, features = ["std", "async # The conformance stack: the Rust crates pinned by git rev, the JS # runner core from JSR (@jsr/polymorph__test, JSR's npm-compat registry -# via conformance/driver-ct/deltic/.npmrc). Both sides of a bump name +# via conformance/driver-ct/polyengine/.npmrc). Both sides of a bump name # ONE polymorph-test release: `component-test pins bump # --cargo-toml Cargo.toml --workflow .github/workflows/ci.yml` with the # release-tag commit, then set the matching release version on the # `@jsr/polymorph__test` dependency in -# conformance/driver-ct/deltic/package.json and `npm install` there — +# conformance/driver-ct/polyengine/package.json and `npm install` there — # the cargo pins gate, the runner-js pin gate # (conformance-ct::runner-js-pin-check), and the CI ref guard fail on # skew. -component-test-sdk = { git = "https://github.com/polymorph-components/polymorph-test", rev = "b4444a25a22106ad4128549bdc9e579552e62210" } +component-test-sdk = { git = "https://github.com/polymorph-components/polymorph-test", rev = "38bfedf2b989522b82ddce5320fc1557a2f61461" } aead = { version = "0.6", default-features = false, features = ["alloc"] } aes = { version = "0.9", features = ["zeroize"] } diff --git a/README.md b/README.md index c61d303..b00834f 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ two deliveries, and the QUIC compatibility layer exist; they pass a cross-implementation [conformance suite](conformance/README.md) on the [`polymorph:test`](https://github.com/polymorph-components/polymorph-test) harness (one shared guest suite against every composed delivery, under -Wasmtime, under deltic on stock Deno, and in headless Chromium), +Wasmtime, under polyengine on stock Deno, and in headless Chromium), cross-implementation interop against OpenSSL, Go `crypto/tls`, and quic-go over real transports, and a scheduled dudect-style [timing lab](timing-lab/README.md), with the performance tradeoff @@ -25,7 +25,7 @@ Everything here is **unstable** (0.x), but [releases](../../releases) are **caret-honest**: within a minor line they stay backward-compatible, and anything breaking bumps the minor. Consumption is pinned at a release's commit — cargo git dependencies, vendored WIT, the release-pinned -deltic/JSR graph — and bumped deliberately. +polyengine/JSR graph — and bumped deliberately. ## Why pure-wasm TLS 1.3 is plausible diff --git a/conformance/README.md b/conformance/README.md index f468621..5e23513 100644 --- a/conformance/README.md +++ b/conformance/README.md @@ -12,13 +12,13 @@ guest-ct/ the suite: cases on the polymorph:test contract, the polymorph:tls surface imported as a consumer would; tests.lock is the committed case inventory driver-ct/ target manifest (targets.toml), the recipes - (justfile, module `conformance-ct`), the deltic - drivers (deltic/), the committed matrix (matrix.md); + (justfile, module `conformance-ct`), the polyengine + drivers (polyengine/), the committed matrix (matrix.md); results/ is generated ``` `just conformance` (from the repository root) runs the standing -matrix: build, inventory check, the wasmtime and deltic targets under +matrix: build, inventory check, the wasmtime and polyengine targets under the pinned tooling, aggregate, and the committed-matrix diff. ## Targets @@ -26,9 +26,9 @@ the pinned tooling, aggregate, and the committed-matrix diff. A target is a composition, not a runtime configuration: the suite is `wac plug`-ged with one TLS stack, and the resulting artifact imports only wasi and `polymorph:test/test-context`. The wasmtime rows run -under the generic component-test host runner; the deltic rows -runtime-link the same artifacts under the JSR-pinned deltic -runtime (`driver-ct/deltic/`) — one suite, one composition, two +under the generic component-test host runner; the polyengine rows +runtime-link the same artifacts under the JSR-pinned polyengine +runtime (`driver-ct/polyengine/`) — one suite, one composition, two engines. | Target | Composition | @@ -36,10 +36,10 @@ engines. | `composed` | the `tls` world build: in-guest Ed25519 signing only | | `composed-delegated` | the `tls-delegated` world build ⊕ the fixture signer (`examples/test-signer`) | | `composed-delegated-webcrypto` | as above, but the signer is the `examples/webcrypto-signer` shim over a real `polymorph:webcrypto` provider; on demand (`just conformance-ct::run-webcrypto`), declared `optional` | -| `deltic-deno` | the `composed` artifact runtime-linked under deltic on stock Deno (no transpile, no engine flag) | -| `deltic-deno-delegated` | the `composed-delegated` artifact, likewise | -| `deltic-browser` | the `composed` artifact runtime-linked inside headless Chromium (gates in CI, locally `CONFORMANCE_BROWSER=1`; declared `optional`) | -| `deltic-browser-delegated` | the `composed-delegated` artifact, likewise | +| `polyengine-deno` | the `composed` artifact runtime-linked under polyengine on stock Deno (no transpile, no engine flag) | +| `polyengine-deno-delegated` | the `composed-delegated` artifact, likewise | +| `polyengine-browser` | the `composed` artifact runtime-linked inside headless Chromium (gates in CI, locally `CONFORMANCE_BROWSER=1`; declared `optional`) | +| `polyengine-browser-delegated` | the `composed-delegated` artifact, likewise | In-suite QUIC cases are [#29](https://github.com/polymorph-components/polymorph-tls/issues/29). diff --git a/conformance/driver-ct/deltic/README.md b/conformance/driver-ct/deltic/README.md deleted file mode 100644 index 5316878..0000000 --- a/conformance/driver-ct/deltic/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# conformance/driver-ct/deltic - -The deltic leg of the conformance matrix: the composed artifacts -(`suite-plain`, `suite-delegated`) run **runtime-linked** under -[deltic](https://github.com/lann/deltic) on stock Deno — no transpile -step, no generated tree, no `--experimental-wasm-jspi` (the WIT -contract's async exports run on the callback ABI). Targets -`deltic-deno` and `deltic-deno-delegated` in `../targets.toml`. - -There is no SUT host module on this leg (the TLS delivery is fused -in-guest, the artifacts import only wasi 0.2 and test-context), so the -whole import surface is deltic's own `wasiShims()` + its runner-supplied -`test-context`. Tag scheduling reads the suite's embedded -`component-test:tags@0.1` inventory (it survives wac composition); -`--missing` mirrors `targets.toml` per target. - -```sh -just conformance-ct::run-deltic # suite-plain -> deltic-deno -just conformance-ct::run-deltic-delegated # suite-delegated -> deltic-deno-delegated -``` - -The on-demand webcrypto composition (`suite-delegated-webcrypto`) runs -under deltic the same way — deltic's own repo smokes it -(`tools/smoke-tls`) — but like the wasmtime row it is not a standing -target here. - -## Pinning - -deltic is pinned to an exact JSR prerelease (`0.1.0-pre.g078aa15`; the -hash names one upstream commit) via `deno.json`'s import-map (`deno.lock` -carries module-graph integrity, enforced with `--frozen`). The browser -leg's embedder bundle and translator wasm are built from that SAME -pinned graph (`../justfile`'s `_deltic-browser-build` recipe: `deno -bundle` for the embedder, `deno info` + copy for the translator wasm) — -no sha256 bookkeeping, no GitHub release-asset fetch. A repo-wide pin -gate (`../justfile`'s `_deltic-pin-check`) asserts every `deno.json` in -the repo agrees on one `@deltic` version. - -To bump: update the version in this directory's `deno.json` import-map -entries, delete `deno.lock`, run `deno install --config deno.json ---entrypoint run.ts browser-bundle-entry.ts` here, and commit the diff -(the pin gate asserts agreement). diff --git a/conformance/driver-ct/deltic/browser-bundle-entry.ts b/conformance/driver-ct/deltic/browser-bundle-entry.ts deleted file mode 100644 index 8484cd5..0000000 --- a/conformance/driver-ct/deltic/browser-bundle-entry.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Bundle entry for the deltic-browser leg: this is upstream -// tools/release-bundle/entry.ts's exact public surface, vendored here so -// the browser bundle is built from the SAME pinned JSR graph as the Deno -// legs instead of a sha256-pinned release asset (see README.md's -// "Pinning" section and ../justfile's `_deltic-browser-build` recipe). -export * from "@deltic/runtime/embedder"; -export { Translator } from "@deltic/runtime/shim"; -export * from "@deltic/ct-runner"; -export { wasi } from "@deltic/wasi"; -export type { WasiImports, WasiOptions } from "@deltic/wasi"; diff --git a/conformance/driver-ct/deltic/deno.json b/conformance/driver-ct/deltic/deno.json deleted file mode 100644 index 2fe8c07..0000000 --- a/conformance/driver-ct/deltic/deno.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "//": "The deltic pin: every @deltic/* import is an exact-pinned JSR release (caret-honest upstream: within a minor line releases stay compatible, breaking bumps the minor; per-commit `-pre.g` prereleases exist between releases — pin exactly); @deltic/translator ships the translator wasm for the SAME commit. deno.lock carries integrity, --frozen enforced. One version repo-wide is asserted by the pin gate (../justfile).", - "imports": { - "@deltic/ct-runner": "jsr:@deltic/ct-runner@0.2.0", - "@deltic/runtime/embedder": "jsr:@deltic/runtime@0.2.0/embedder", - "@deltic/runtime/shim": "jsr:@deltic/runtime@0.2.0/shim", - "@deltic/wasi": "jsr:@deltic/wasi@0.2.0", - "@deltic/translator": "jsr:@deltic/translator@0.2.0" - }, - "minimumDependencyAge": { "age": "P1D", "exclude": ["jsr:@deltic/*", "jsr:@polymorph/*"] }, - "tasks": { - "check": "deno check run.ts browser-bundle-entry.ts" - } -} diff --git a/conformance/driver-ct/deltic/deno.lock b/conformance/driver-ct/deltic/deno.lock deleted file mode 100644 index f194e68..0000000 --- a/conformance/driver-ct/deltic/deno.lock +++ /dev/null @@ -1,67 +0,0 @@ -{ - "version": "5", - "specifiers": { - "jsr:@deltic/ct-runner@0.2.0": "0.2.0", - "jsr:@deltic/protocol@0.2": "0.2.0", - "jsr:@deltic/runtime@0.2": "0.2.0", - "jsr:@deltic/runtime@0.2.0": "0.2.0", - "jsr:@deltic/translator@0.2.0": "0.2.0", - "jsr:@deltic/wasi@0.2.0": "0.2.0", - "npm:@jsr/polymorph__test@0.1.1": "0.1.1", - "npm:playwright-core@1.62.1": "1.62.1" - }, - "jsr": { - "@deltic/ct-runner@0.2.0": { - "integrity": "810eec021dc07dbc7efe00e0e7df900f557c5b30bd11f077195eeb44bcce81b4", - "dependencies": [ - "jsr:@deltic/runtime@0.2" - ] - }, - "@deltic/protocol@0.2.0": { - "integrity": "028be6a3623c5e910598aa7a199209b85e8931ae484ac7f6638d610ddb0e19fa" - }, - "@deltic/runtime@0.2.0": { - "integrity": "cf8b0bdd9e6bc4488ba78cc91661103bfcbd78f5a5c4ff99132799618a9db4bb", - "dependencies": [ - "jsr:@deltic/protocol" - ] - }, - "@deltic/translator@0.2.0": { - "integrity": "8104b54e2acdccfd75f5ddc941d72b581e7defbbe31c05bbc66598d2df7a34f9", - "dependencies": [ - "jsr:@deltic/runtime@0.2" - ] - }, - "@deltic/wasi@0.2.0": { - "integrity": "82c76d4fda0a1c9238a91f8ebc7fdbac952a03aa06d4a2a820213df2654f5c24", - "dependencies": [ - "jsr:@deltic/protocol", - "jsr:@deltic/runtime@0.2" - ] - } - }, - "npm": { - "@jsr/polymorph__test@0.1.1": { - "integrity": "sha512-bu0jE52btthChm83f04rQo+twOLszJ/JN7nLGl/5W/66cZb8tQrlZG+Lnd4/XierTlBgy0PpW75bjbqQBY2nDg==", - "tarball": "https://npm.jsr.io/~/11/@jsr/polymorph__test/0.1.1.tgz" - }, - "playwright-core@1.62.1": { - "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", - "bin": true - } - }, - "workspace": { - "dependencies": [ - "jsr:@deltic/ct-runner@0.2.0", - "jsr:@deltic/runtime@0.2.0", - "jsr:@deltic/translator@0.2.0", - "jsr:@deltic/wasi@0.2.0" - ], - "packageJson": { - "dependencies": [ - "npm:@jsr/polymorph__test@0.1.1", - "npm:playwright-core@1.62.1" - ] - } - } -} diff --git a/conformance/driver-ct/deltic/package.json b/conformance/driver-ct/deltic/package.json deleted file mode 100644 index a57caf7..0000000 --- a/conformance/driver-ct/deltic/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@polymorph/tls-conformance-deltic-browser", - "private": true, - "type": "module", - "description": "Node driver for the deltic-browser conformance rows: the composed artifacts runtime-linked inside headless Chromium through the upstream page driver and deltic worker.", - "dependencies": { - "@jsr/polymorph__test": "0.1.1", - "playwright-core": "1.62.1" - } -} diff --git a/conformance/driver-ct/justfile b/conformance/driver-ct/justfile index 6b1bb35..502c67f 100644 --- a/conformance/driver-ct/justfile +++ b/conformance/driver-ct/justfile @@ -88,22 +88,22 @@ run-delegated: build _ct-tools --suite-artifact {{guest}} \ --target composed-delegated --jsonl > {{results}}/composed-delegated.jsonl -# The one-version-everywhere gate: every jsr:@deltic/* import across +# The one-version-everywhere gate: every jsr:@polyengine/* import across # every deno.json in the repo must pin the same version (replaces the # retired fetch-based translator script's pin-consistency check). Runs -# at the top of every deltic recipe below so drift fails loud immediately. -_deltic-pin-check: +# at the top of every polyengine recipe below so drift fails loud immediately. +_polyengine-pin-check: #!/usr/bin/env bash set -euo pipefail cd {{root}} files=$(find . -name deno.json -not -path '*/node_modules/*') - v=$(grep -ho 'jsr:@deltic/[a-z-]*@[^/"]*' $files | sed 's/.*@//' | sort -u) + v=$(grep -ho 'jsr:@polyengine/[a-z-]*@[^/"]*' $files | sed 's/.*@//' | sort -u) n=$(printf '%s\n' "$v" | sed '/^$/d' | wc -l) - [ "$n" = 1 ] || { echo "deltic pin drift: $v" >&2; exit 1; } + [ "$n" = 1 ] || { echo "polyengine pin drift: $v" >&2; exit 1; } -# The JS runner core's one-version gate: the deltic npm tree consuming +# The JS runner core's one-version gate: the polyengine npm tree consuming # @jsr/polymorph__test (jsr:@polymorph/test through JSR's npm-compat -# registry, per deltic/.npmrc) and deltic's own deno.lock (which also +# registry, per polyengine/.npmrc) and polyengine's own deno.lock (which also # tracks that package.json dependency) must agree on one resolved # version — a skewed bump runs the JS harness against a Rust runner # from a different polymorph-test release, a subtle contract-mismatch @@ -113,8 +113,8 @@ runner-js-pin-check: set -euo pipefail cd {{root}} v=$({ jq -r '.packages["node_modules/@jsr/polymorph__test"].version' \ - conformance/driver-ct/deltic/package-lock.json; \ - jq -r '.npm | keys[]' conformance/driver-ct/deltic/deno.lock \ + conformance/driver-ct/polyengine/package-lock.json; \ + jq -r '.npm | keys[]' conformance/driver-ct/polyengine/deno.lock \ | grep '^@jsr/polymorph__test@' | sed 's/.*@//'; } | sort -u) if [ "$v" = "null" ] || [ -z "$v" ] || [ "$(printf '%s\n' "$v" | wc -l)" != 1 ]; then echo "runner-js pin drift: $v" >&2 @@ -122,36 +122,36 @@ runner-js-pin-check: fi echo "runner-js pin OK: @jsr/polymorph__test $v" -# The composed artifact runtime-linked under deltic on stock Deno — +# The composed artifact runtime-linked under polyengine on stock Deno — # no transpile step, no generated tree, no engine flag (callback ABI). -# The pin and the module-graph lock live in deltic/ (see its README). -# The translator is the packaged @deltic/translator asset, resolved +# The pin and the module-graph lock live in polyengine/ (see its README). +# The translator is the packaged @polyengine/translator asset, resolved # through the module graph (no net grant, no fetched-asset read grant). -run-deltic: _deltic-pin-check build +run-polyengine: _polyengine-pin-check build #!/usr/bin/env bash set -euo pipefail - cd {{root}}/conformance/driver-ct/deltic + cd {{root}}/conformance/driver-ct/polyengine deno run --allow-read=../../.. --allow-write=../results \ --config deno.json --frozen run.ts \ --suite suite-plain --missing delegated-signer \ - --target deltic-deno + --target polyengine-deno -# The composed-delegated artifact under deltic on stock Deno. -run-deltic-delegated: _deltic-pin-check build +# The composed-delegated artifact under polyengine on stock Deno. +run-polyengine-delegated: _polyengine-pin-check build #!/usr/bin/env bash set -euo pipefail - cd {{root}}/conformance/driver-ct/deltic + cd {{root}}/conformance/driver-ct/polyengine deno run --allow-read=../../.. --allow-write=../results \ --config deno.json --frozen run.ts \ --suite suite-delegated \ - --target deltic-deno-delegated + --target polyengine-deno-delegated -# The deltic browser driver's npm tree (the upstream page driver + +# The polyengine browser driver's npm tree (the upstream page driver + # playwright-core; no transpiler). -_deltic-browser-prepared: build +_polyengine-browser-prepared: build #!/usr/bin/env bash set -euo pipefail - cd {{root}}/conformance/driver-ct/deltic + cd {{root}}/conformance/driver-ct/polyengine if [ package-lock.json -nt node_modules/.package-lock.json ]; then npm ci --no-audit --no-fund fi @@ -159,40 +159,40 @@ _deltic-browser-prepared: build # The two repo-built browser assets, from the SAME pinned JSR graph as # the Deno legs (no sha256 bookkeeping — the lock owns integrity). # Version-free output dir: the lock (not a path segment) owns the -# deltic version now (see deltic/README.md, "Pinning"). -_deltic-browser-build: _deltic-pin-check _deltic-browser-prepared +# polyengine version now (see polyengine/README.md, "Pinning"). +_polyengine-browser-build: _polyengine-pin-check _polyengine-browser-prepared #!/usr/bin/env bash set -euo pipefail - cd {{root}}/conformance/driver-ct/deltic - out=../../../target/deltic-browser + cd {{root}}/conformance/driver-ct/polyengine + out=../../../target/polyengine-browser mkdir -p "$out" deno bundle --config deno.json --frozen --platform browser \ - -o "$out/deltic-embedder.mjs" browser-bundle-entry.ts + -o "$out/polyengine-embedder.mjs" browser-bundle-entry.ts info=$(mktemp) trap 'rm -f "$info"' EXIT - deno info --json --config deno.json --frozen @deltic/translator > "$info" - pin=$(grep -o 'jsr:@deltic/runtime@[^/"]*' deno.json | head -1 | sed 's/.*@//') - python3 extract-translator-wasm.py "$info" "$out/deltic-translator-shim.wasm" "$pin" + deno info --json --config deno.json --frozen @polyengine/translator > "$info" + pin=$(grep -o 'jsr:@polyengine/runtime@[^/"]*' deno.json | head -1 | sed 's/.*@//') + python3 extract-translator-wasm.py "$info" "$out/polyengine-translator-shim.wasm" "$pin" # Both composed artifacts runtime-linked inside headless Chromium: the -# upstream deltic worker loads the repo-built embedder bundle and links +# upstream polyengine worker loads the repo-built embedder bundle and links # the suite in the browser — no transpile step, no generated tree. -run-deltic-browser: _deltic-browser-build +run-polyengine-browser: _polyengine-browser-build #!/usr/bin/env bash set -euo pipefail - cd {{root}}/conformance/driver-ct/deltic + cd {{root}}/conformance/driver-ct/polyengine node run-browser.mjs -# Runs the deltic browser leg under CI or CONFORMANCE_BROWSER=1; +# Runs the polyengine browser leg under CI or CONFORMANCE_BROWSER=1; # otherwise clears stale results so the standing run is deterministic. -_run-deltic-browser-if-enabled: +_run-polyengine-browser-if-enabled: #!/usr/bin/env bash set -euo pipefail if [ "${GITHUB_ACTIONS:-}" = "true" ] || [ "${CONFORMANCE_BROWSER:-}" = "1" ]; then - cd {{root}} && just conformance-ct::run-deltic-browser + cd {{root}} && just conformance-ct::run-polyengine-browser else cd {{root}} - rm -f {{results}}/deltic-browser.jsonl {{results}}/deltic-browser-delegated.jsonl + rm -f {{results}}/polyengine-browser.jsonl {{results}}/polyengine-browser-delegated.jsonl fi # The on-demand third target: the `tls-delegated` world over the @@ -233,22 +233,22 @@ aggregate: _ct-tools cd {{root}} extra=() [ -f {{results}}/composed-delegated-webcrypto.jsonl ] && extra+=(--results composed-delegated-webcrypto={{results}}/composed-delegated-webcrypto.jsonl) - [ -f {{results}}/deltic-browser.jsonl ] && extra+=(--results deltic-browser={{results}}/deltic-browser.jsonl) - [ -f {{results}}/deltic-browser-delegated.jsonl ] && extra+=(--results deltic-browser-delegated={{results}}/deltic-browser-delegated.jsonl) + [ -f {{results}}/polyengine-browser.jsonl ] && extra+=(--results polyengine-browser={{results}}/polyengine-browser.jsonl) + [ -f {{results}}/polyengine-browser-delegated.jsonl ] && extra+=(--results polyengine-browser-delegated={{results}}/polyengine-browser-delegated.jsonl) {{ct}} aggregate \ --lock conformance/guest-ct/tests.lock \ --manifest conformance/driver-ct/targets.toml \ --results composed={{results}}/composed.jsonl \ --results composed-delegated={{results}}/composed-delegated.jsonl \ - --results deltic-deno={{results}}/deltic-deno.jsonl \ - --results deltic-deno-delegated={{results}}/deltic-deno-delegated.jsonl \ + --results polyengine-deno={{results}}/polyengine-deno.jsonl \ + --results polyengine-deno-delegated={{results}}/polyengine-deno-delegated.jsonl \ ${extra[@]+"${extra[@]}"} \ -o {{results}}/matrix.md # The standing matrix: inventory check, all standing targets, # aggregate. Stale on-demand webcrypto results are cleared first so the # standing run is deterministic. -all: lock-check run-composed run-delegated run-deltic run-deltic-delegated _run-deltic-browser-if-enabled _clear-webcrypto aggregate +all: lock-check run-composed run-delegated run-polyengine run-polyengine-delegated _run-polyengine-browser-if-enabled _clear-webcrypto aggregate _clear-webcrypto: rm -f results/composed-delegated-webcrypto.jsonl diff --git a/conformance/driver-ct/matrix.md b/conformance/driver-ct/matrix.md index a8ea725..f237509 100644 --- a/conformance/driver-ct/matrix.md +++ b/conformance/driver-ct/matrix.md @@ -4,7 +4,7 @@ - target `composed-delegated-webcrypto`: no results (declared optional) -| Case | composed | composed-delegated | composed-delegated-webcrypto | deltic-browser | deltic-browser-delegated | deltic-deno | deltic-deno-delegated | +| Case | composed | composed-delegated | composed-delegated-webcrypto | polyengine-browser | polyengine-browser-delegated | polyengine-deno | polyengine-deno-delegated | | --- | --- | --- | --- | --- | --- | --- | --- | | data (1 cases) | pass | pass | — | pass | pass | pass | pass | | delegated (3 cases) | 2 N/A, 1 pass | 1 N/A, 2 pass | — | 2 N/A, 1 pass | 1 N/A, 2 pass | 2 N/A, 1 pass | 1 N/A, 2 pass | @@ -21,7 +21,7 @@ None. - `composed`: 2 N/A, 5 pass (7 total) - `composed-delegated`: 1 N/A, 6 pass (7 total) - `composed-delegated-webcrypto`: no results -- `deltic-browser`: 2 N/A, 5 pass (7 total) -- `deltic-browser-delegated`: 1 N/A, 6 pass (7 total) -- `deltic-deno`: 2 N/A, 5 pass (7 total) -- `deltic-deno-delegated`: 1 N/A, 6 pass (7 total) +- `polyengine-browser`: 2 N/A, 5 pass (7 total) +- `polyengine-browser-delegated`: 1 N/A, 6 pass (7 total) +- `polyengine-deno`: 2 N/A, 5 pass (7 total) +- `polyengine-deno-delegated`: 1 N/A, 6 pass (7 total) diff --git a/conformance/driver-ct/deltic/.npmrc b/conformance/driver-ct/polyengine/.npmrc similarity index 100% rename from conformance/driver-ct/deltic/.npmrc rename to conformance/driver-ct/polyengine/.npmrc diff --git a/conformance/driver-ct/polyengine/README.md b/conformance/driver-ct/polyengine/README.md new file mode 100644 index 0000000..bdc682e --- /dev/null +++ b/conformance/driver-ct/polyengine/README.md @@ -0,0 +1,43 @@ +# conformance/driver-ct/polyengine + +The polyengine leg of the conformance matrix: the composed artifacts +(`suite-plain`, `suite-delegated`) run **runtime-linked** under +[polyengine](https://github.com/polymorph-components/polyengine) on +stock Deno — no transpile step, no generated tree, no +`--experimental-wasm-jspi` (the WIT contract's async exports run on the +callback ABI). Targets `polyengine-deno` and `polyengine-deno-delegated` +in `../targets.toml`. + +There is no SUT host module on this leg (the TLS delivery is fused +in-guest, the artifacts import only wasi 0.2 and test-context), so the +whole import surface is polyengine's own `wasiShims()` + its +runner-supplied `test-context`. Tag scheduling reads the suite's +embedded `component-test:tags@0.1` inventory (it survives wac +composition); `--missing` mirrors `targets.toml` per target. + +```sh +just conformance-ct::run-polyengine # suite-plain -> polyengine-deno +just conformance-ct::run-polyengine-delegated # suite-delegated -> polyengine-deno-delegated +``` + +The on-demand webcrypto composition (`suite-delegated-webcrypto`) runs +under polyengine the same way — polyengine's own repo smokes it +(`tools/smoke-tls`) — but like the wasmtime row it is not a standing +target here. + +## Pinning + +polyengine is pinned to an exact JSR release (`0.3.0`; see `deno.json`'s +import-map, `deno.lock` carries module-graph integrity, enforced with +`--frozen`). The browser leg's embedder bundle and translator wasm are +built from that SAME pinned graph (`../justfile`'s +`_polyengine-browser-build` recipe: `deno bundle` for the embedder, +`deno info` + copy for the translator wasm) — no sha256 bookkeeping, no +GitHub release-asset fetch. A repo-wide pin gate (`../justfile`'s +`_polyengine-pin-check`) asserts every `deno.json` in the repo agrees on +one `@polyengine` version. + +To bump: update the version in this directory's `deno.json` import-map +entries, delete `deno.lock`, run `deno install --config deno.json +--entrypoint run.ts browser-bundle-entry.ts` here, and commit the diff +(the pin gate asserts agreement). diff --git a/conformance/driver-ct/polyengine/browser-bundle-entry.ts b/conformance/driver-ct/polyengine/browser-bundle-entry.ts new file mode 100644 index 0000000..02bffa8 --- /dev/null +++ b/conformance/driver-ct/polyengine/browser-bundle-entry.ts @@ -0,0 +1,10 @@ +// Bundle entry for the polyengine-browser leg: this is upstream +// tools/release-bundle/entry.ts's exact public surface, vendored here so +// the browser bundle is built from the SAME pinned JSR graph as the Deno +// legs instead of a sha256-pinned release asset (see README.md's +// "Pinning" section and ../justfile's `_polyengine-browser-build` recipe). +export * from "@polyengine/runtime/embedder"; +export { Translator } from "@polyengine/runtime/shim"; +export * from "@polyengine/ct-runner"; +export { wasi } from "@polyengine/wasi"; +export type { WasiImports, WasiOptions } from "@polyengine/wasi"; diff --git a/conformance/driver-ct/polyengine/deno.json b/conformance/driver-ct/polyengine/deno.json new file mode 100644 index 0000000..f1b5db4 --- /dev/null +++ b/conformance/driver-ct/polyengine/deno.json @@ -0,0 +1,14 @@ +{ + "//": "The polyengine pin: every @polyengine/* import is an exact-pinned JSR release (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 the SAME commit. deno.lock carries integrity, --frozen enforced. One version repo-wide is asserted by the pin gate (../justfile). minimumDependencyAge excludes our own coordinated packages from the freshness gate, in both forms consumed here: direct jsr: imports and the @jsr/polymorph__test runner core pulled in via npm-compat (npm:@jsr/polymorph__*).", + "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" + }, + "minimumDependencyAge": { "age": "P1D", "exclude": ["jsr:@polyengine/*", "jsr:@polymorph/*", "npm:@jsr/polymorph__*"] }, + "tasks": { + "check": "deno check run.ts browser-bundle-entry.ts" + } +} diff --git a/conformance/driver-ct/polyengine/deno.lock b/conformance/driver-ct/polyengine/deno.lock new file mode 100644 index 0000000..9d797e8 --- /dev/null +++ b/conformance/driver-ct/polyengine/deno.lock @@ -0,0 +1,67 @@ +{ + "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", + "npm:@jsr/polymorph__test@0.2.0": "0.2.0", + "npm:playwright-core@1.62.1": "1.62.1" + }, + "jsr": { + "@polyengine/ct-runner@0.3.0": { + "integrity": "d58720da80bf29cb6a975e4750a53bbe9b75ab6e3bde1340299ed69726702174", + "dependencies": [ + "jsr:@polyengine/runtime@0.3" + ] + }, + "@polyengine/protocol@0.1.0": { + "integrity": "0c97f34166f22ba55e7b084148df96e47aebe47cd9dd13930057759c9161bb1c" + }, + "@polyengine/runtime@0.3.0": { + "integrity": "97d7648c104dd0f08b4d10e1ed0117ab0cb5243db68c139f1f3df25755ed4e60", + "dependencies": [ + "jsr:@polyengine/protocol" + ] + }, + "@polyengine/translator@0.3.0": { + "integrity": "1d9fcd09d360850bc08927ed1cf8124d50a0fed09ed8c80f354a6d3aedfcad25", + "dependencies": [ + "jsr:@polyengine/runtime@0.3" + ] + }, + "@polyengine/wasi@0.3.0": { + "integrity": "991adfdd39f795f94bba91a523322b88d45ff42800669b5b472356676e3c97e7", + "dependencies": [ + "jsr:@polyengine/protocol", + "jsr:@polyengine/runtime@0.3" + ] + } + }, + "npm": { + "@jsr/polymorph__test@0.2.0": { + "integrity": "sha512-fM1IYIy4HnBJm2IlZn/3Gk0d9AmQZz9Kg6JkY0E+fPAhFb2hrAW+4G7TCRQsJ4PStl0rzuBqF9VI6w30f7xCMA==", + "tarball": "https://npm.jsr.io/~/11/@jsr/polymorph__test/0.2.0.tgz" + }, + "playwright-core@1.62.1": { + "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", + "bin": true + } + }, + "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" + ], + "packageJson": { + "dependencies": [ + "npm:@jsr/polymorph__test@0.2.0", + "npm:playwright-core@1.62.1" + ] + } + } +} diff --git a/conformance/driver-ct/deltic/extract-translator-wasm.py b/conformance/driver-ct/polyengine/extract-translator-wasm.py similarity index 90% rename from conformance/driver-ct/deltic/extract-translator-wasm.py rename to conformance/driver-ct/polyengine/extract-translator-wasm.py index 258701e..86ade00 100644 --- a/conformance/driver-ct/deltic/extract-translator-wasm.py +++ b/conformance/driver-ct/polyengine/extract-translator-wasm.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Extract the translator wasm from the lock-pinned @deltic/translator +"""Extract the translator wasm from the lock-pinned @polyengine/translator module graph (`deno info --json`) into the browser-asset output dir. No network, no sha256 bookkeeping: JSR package integrity lives in @@ -7,7 +7,7 @@ cache entry down to its module bytes (Deno's on-disk remote-cache file carries a trailing "\n// denoCacheMetadata={...}" line after the wasm body — see the truncation + sanity checks below). See ../justfile's -`_deltic-browser-build` recipe and README.md's "Pinning" section. +`_polyengine-browser-build` recipe and README.md's "Pinning" section. Usage: extract-translator-wasm.py """ @@ -18,7 +18,7 @@ def main() -> int: info_path, out_path, expected_version = sys.argv[1], sys.argv[2], sys.argv[3] graph = json.load(open(info_path)) - mods = [m for m in graph["modules"] if "/@deltic/" in m.get("specifier", "")] + mods = [m for m in graph["modules"] if "/@polyengine/" in m.get("specifier", "")] bad = {m["specifier"] for m in mods if expected_version not in m["specifier"]} if bad: print(f"pin drift in translator graph: {bad}", file=sys.stderr) diff --git a/conformance/driver-ct/deltic/package-lock.json b/conformance/driver-ct/polyengine/package-lock.json similarity index 68% rename from conformance/driver-ct/deltic/package-lock.json rename to conformance/driver-ct/polyengine/package-lock.json index 42c71d0..d3acff5 100644 --- a/conformance/driver-ct/deltic/package-lock.json +++ b/conformance/driver-ct/polyengine/package-lock.json @@ -1,19 +1,19 @@ { - "name": "@polymorph/tls-conformance-deltic-browser", + "name": "@polymorph/tls-conformance-polyengine-browser", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@polymorph/tls-conformance-deltic-browser", + "name": "@polymorph/tls-conformance-polyengine-browser", "dependencies": { - "@jsr/polymorph__test": "0.1.1", + "@jsr/polymorph__test": "0.2.0", "playwright-core": "1.62.1" } }, "node_modules/@jsr/polymorph__test": { - "version": "0.1.1", - "resolved": "https://npm.jsr.io/~/11/@jsr/polymorph__test/0.1.1.tgz", - "integrity": "sha512-bu0jE52btthChm83f04rQo+twOLszJ/JN7nLGl/5W/66cZb8tQrlZG+Lnd4/XierTlBgy0PpW75bjbqQBY2nDg==" + "version": "0.2.0", + "resolved": "https://npm.jsr.io/~/11/@jsr/polymorph__test/0.2.0.tgz", + "integrity": "sha512-fM1IYIy4HnBJm2IlZn/3Gk0d9AmQZz9Kg6JkY0E+fPAhFb2hrAW+4G7TCRQsJ4PStl0rzuBqF9VI6w30f7xCMA==" }, "node_modules/playwright-core": { "version": "1.62.1", diff --git a/conformance/driver-ct/polyengine/package.json b/conformance/driver-ct/polyengine/package.json new file mode 100644 index 0000000..7885c29 --- /dev/null +++ b/conformance/driver-ct/polyengine/package.json @@ -0,0 +1,10 @@ +{ + "name": "@polymorph/tls-conformance-polyengine-browser", + "private": true, + "type": "module", + "description": "Node driver for the polyengine-browser conformance rows: the composed artifacts runtime-linked inside headless Chromium through the upstream page driver and polyengine worker.", + "dependencies": { + "@jsr/polymorph__test": "0.2.0", + "playwright-core": "1.62.1" + } +} diff --git a/conformance/driver-ct/deltic/run-browser.mjs b/conformance/driver-ct/polyengine/run-browser.mjs similarity index 72% rename from conformance/driver-ct/deltic/run-browser.mjs rename to conformance/driver-ct/polyengine/run-browser.mjs index e56c7bd..80a2c77 100644 --- a/conformance/driver-ct/deltic/run-browser.mjs +++ b/conformance/driver-ct/polyengine/run-browser.mjs @@ -1,11 +1,11 @@ -// The deltic-browser leg: both composed artifacts run runtime-linked +// The polyengine-browser leg: both composed artifacts run runtime-linked // inside headless Chromium — the page, worker pool, stall watchdog, and // Chrome ladder all live in @jsr/polymorph__test, and the -// upstream DELTIC worker (runner-deltic/browser-worker.mjs) loads the -// pinned deltic-embedder.mjs release asset and links the suite in the +// upstream polyengine worker (runner-polyengine/browser-worker.mjs) loads the +// pinned polyengine-embedder.mjs release asset and links the suite in the // browser: no transpile step, no generated tree. This file is the frame: // asset URL wiring, target configuration, and results-file writing — -// the browser sibling of ../deltic/run.ts (as the retired jco +// the browser sibling of ../polyengine/run.ts (as the retired jco // run-browser.mjs was of its run-node.mjs; see git history). // // The artifacts import only wasi 0.2 and test-context, so there is no @@ -14,7 +14,7 @@ // // Gates in CI (the Actions runner image ships Chrome); locally it runs // under CONFORMANCE_BROWSER=1 (`just conformance-ct::all`) or directly -// via `just conformance-ct::run-deltic-browser`. The justfile recipe +// via `just conformance-ct::run-polyengine-browser`. The justfile recipe // builds the two browser assets first (deno bundle for the embedder, // deno info + copy for the translator wasm — both from the SAME pinned // JSR graph as the Deno legs; see README.md's "Pinning" section), served to the @@ -31,37 +31,37 @@ import { } from "@jsr/polymorph__test/browser-driver"; import { writeResultsFile } from "@jsr/polymorph__test/node-runner"; -const DELTIC_DIR = dirname(fileURLToPath(import.meta.url)); -const REPO_ROOT = join(DELTIC_DIR, "..", "..", ".."); -// Version-free: the lock (not a path segment) owns the deltic version now +const POLYENGINE_DIR = dirname(fileURLToPath(import.meta.url)); +const REPO_ROOT = join(POLYENGINE_DIR, "..", "..", ".."); +// Version-free: the lock (not a path segment) owns the polyengine version now // (see README.md's "Pinning" section). Built by the justfile's // browser-asset recipes before this script runs. -const ASSETS = `/target/deltic-browser`; +const ASSETS = `/target/polyengine-browser`; const CASE_TIMEOUT_MS = 60_000; const STALL_TIMEOUT_MS = 90_000; const { values } = parseArgs({ options: { - out: { type: "string", default: join(DELTIC_DIR, "..", "results") }, + out: { type: "string", default: join(POLYENGINE_DIR, "..", "results") }, }, }); const common = { suite: "conformance-guest-ct", - bundleUrl: `${ASSETS}/deltic-embedder.mjs`, - translatorUrl: `${ASSETS}/deltic-translator-shim.wasm`, + bundleUrl: `${ASSETS}/polyengine-embedder.mjs`, + translatorUrl: `${ASSETS}/polyengine-translator-shim.wasm`, caseTimeoutMs: CASE_TIMEOUT_MS, }; const SUITES = [ { ...common, - target: "deltic-browser", + target: "polyengine-browser", suiteUrl: "/target/conformance/suite-plain.wasm", missing: ["delegated-signer"], }, { ...common, - target: "deltic-browser-delegated", + target: "polyengine-browser-delegated", suiteUrl: "/target/conformance/suite-delegated.wasm", missing: [], }, @@ -74,10 +74,10 @@ const outcome = await runPageHarness({ executablePath: await findChrome(), repoRoot: REPO_ROOT, html: buildHarnessPage({ - title: "polymorph:tls conformance (deltic-browser)", + title: "polymorph:tls conformance (polyengine-browser)", config: { jobs: 1, - workerUrl: `${MOUNT}/runner-deltic/browser-worker.mjs`, + workerUrl: `${MOUNT}/runner-polyengine/browser-worker.mjs`, suites: SUITES, }, }), diff --git a/conformance/driver-ct/deltic/run.ts b/conformance/driver-ct/polyengine/run.ts similarity index 84% rename from conformance/driver-ct/deltic/run.ts rename to conformance/driver-ct/polyengine/run.ts index 5d2c550..91d919c 100644 --- a/conformance/driver-ct/deltic/run.ts +++ b/conformance/driver-ct/polyengine/run.ts @@ -1,7 +1,7 @@ -// The deltic leg of the conformance harness: runs a composed artifact +// The polyengine leg of the conformance harness: runs a composed artifact // (the shared suite fused with one TLS delivery) runtime-linked under -// deltic on stock Deno, and writes component-test results JSONL for the -// aggregate — the deltic analogue of the retired jco run-node.mjs +// polyengine on stock Deno, and writes component-test results JSONL for the +// aggregate — the polyengine analogue of the retired jco run-node.mjs // (removed with the jco legs; see git history), mirroring its // frame exactly: // @@ -11,30 +11,30 @@ // bindImports (preview2-shim, both | wasi() (track-keyed: // wasi minor spellings bound) | one @0.2 provider serves // | every minor) -// inventoryLookup(coreBytes) + missing | deltic reads the suite's own +// inventoryLookup(coreBytes) + missing | polyengine reads the suite's own // via runSuiteJsonl | embedded inventory; missing -// | via runSuite (deltic#25) +// | via runSuite (polyengine#25) // node --experimental-wasm-jspi | stock deno, callback ABI — // | no engine flag // // The artifacts import only wasi 0.2 and test-context, so there is no // SUT host module on this leg (the TLS delivery is fused in-guest); -// deltic's runner supplies test-context itself. No network, no PKI: +// polyengine's runner supplies test-context itself. No network, no PKI: // the suite's cryptography runs in-guest. // // deno run --allow-read=../../.. --allow-write=../results \ // --config deno.json --frozen run.ts --suite suite-plain \ -// --missing delegated-signer --target deltic-deno +// --missing delegated-signer --target polyengine-deno // -// The translator is the packaged @deltic/translator asset, loaded +// The translator is the packaged @polyengine/translator asset, loaded // through the module graph (no net grant, no read grant for a fetched // wasm) — see README.md's "Pinning" section. -import { Translator } from "@deltic/runtime/shim"; -import type { ComponentArtifacts } from "@deltic/runtime/embedder"; -import { runSuite } from "@deltic/ct-runner"; -import { wasi } from "@deltic/wasi"; -import { defaultTranslator } from "@deltic/translator"; +import { Translator } from "@polyengine/runtime/shim"; +import type { ComponentArtifacts } from "@polyengine/runtime/embedder"; +import { runSuite } from "@polyengine/ct-runner"; +import { wasi } from "@polyengine/wasi"; +import { defaultTranslator } from "@polyengine/translator"; const ROOT = new URL("../../../", import.meta.url); const RESULTS = new URL("../results/", import.meta.url); @@ -63,7 +63,7 @@ interface Cli { missing: string[]; // Optional: an explicit translator shim wasm path, for callers that // source their own build (e.g. a local dev override). Defaults to the - // packaged @deltic/translator asset (defaultTranslator()); see + // packaged @polyengine/translator asset (defaultTranslator()); see // README.md's "Pinning" section. translator?: string; } diff --git a/conformance/driver-ct/targets.toml b/conformance/driver-ct/targets.toml index 667f50d..aa9570f 100644 --- a/conformance/driver-ct/targets.toml +++ b/conformance/driver-ct/targets.toml @@ -2,10 +2,10 @@ # A target is a composition of the shared suite with one delivery of # the algorithm profile: the wasmtime rows run under the generic # component-test host runner (the composed artifact imports only wasi -# and test-context), and the deltic rows runtime-link the same -# artifacts under the JSR-pinned deltic runtime — on stock Deno -# (driver-ct/deltic/run.ts) and inside headless Chromium -# (driver-ct/deltic/run-browser.mjs). +# and test-context), and the polyengine rows runtime-link the same +# artifacts under the JSR-pinned polyengine runtime — on stock Deno +# (driver-ct/polyengine/run.ts) and inside headless Chromium +# (driver-ct/polyengine/run-browser.mjs). # # The browser rows gate in CI (the Actions image ships Chrome); # locally they run under CONFORMANCE_BROWSER=1, so they are declared @@ -28,14 +28,14 @@ missing-features = ["delegated-signer"] [targets.composed-delegated] missing-features = [] -# The composed artifact runtime-linked under deltic on stock Deno -# (driver-ct/deltic/run.ts): no transpile step, no engine flag — the +# The composed artifact runtime-linked under polyengine on stock Deno +# (driver-ct/polyengine/run.ts): no transpile step, no engine flag — the # release-pinned runtime links the component at load time. -[targets.deltic-deno] +[targets.polyengine-deno] missing-features = ["delegated-signer"] -# The composed-delegated artifact under deltic on stock Deno. -[targets.deltic-deno-delegated] +# The composed-delegated artifact under polyengine on stock Deno. +[targets.polyengine-deno-delegated] missing-features = [] # As composed-delegated, but the signer is the webcrypto-signer shim @@ -49,13 +49,13 @@ missing-features = [] optional = true # The composed artifact runtime-linked inside headless Chromium (the -# upstream deltic worker; no transpile step). -[targets.deltic-browser] +# upstream polyengine worker; no transpile step). +[targets.polyengine-browser] missing-features = ["delegated-signer"] optional = true # The composed-delegated artifact runtime-linked inside headless # Chromium. -[targets.deltic-browser-delegated] +[targets.polyengine-browser-delegated] missing-features = [] optional = true