From 57788d3fb5d075cc2e98312809e11ed0204baec9 Mon Sep 17 00:00:00 2001 From: Lann Martin Date: Sat, 5 Sep 2026 12:23:32 -0400 Subject: [PATCH] polyengine 0.6.3; @polymorph/* 0.6.0; @polymorph/iroh 0.6.0 Move host-polyengine's caret constraints to the polyengine v0.6.3 lockstep line, @polyengine/protocol ^0.3.1, and the sibling host modules @polymorph/{webcrypto,websocket,webrtc-datachannels} ^0.6.0 (their protocol line moved with polyengine's); the relay-ws experiment config takes the same versions as exact pins. Both locks resolve one runtime family version and one protocol version. polyengine 0.6.0 removed CliOptions.passthrough with no replacement sink, so the exam's EXAM_GUEST_LOGS knob (live guest stdout/stderr on the console) goes with it; the captured text stays reachable through the instance's stdout()/stderr(). @polymorph/iroh 0.5.1 -> 0.6.0: the protocol minor bump is breaking under the caret-honest scheme. Gates: polyengine-setup (--frozen), deno task check (both configs), exam-polyengine (pin drift, identity gate, 10/10 scenarios), deno publish --dry-run, just check. --- experiments/iroh-relay-ws/host/deno.json | 16 +++--- experiments/iroh-relay-ws/host/deno.lock | 63 +++++++++++----------- host-polyengine/README.md | 13 ++--- host-polyengine/deno.json | 16 +++--- host-polyengine/deno.lock | 67 ++++++++++++------------ host-polyengine/src/harness.ts | 6 --- host-polyengine/src/run-endpoint.ts | 4 +- 7 files changed, 88 insertions(+), 97 deletions(-) diff --git a/experiments/iroh-relay-ws/host/deno.json b/experiments/iroh-relay-ws/host/deno.json index 6b3fe66..8da5ae7 100644 --- a/experiments/iroh-relay-ws/host/deno.json +++ b/experiments/iroh-relay-ws/host/deno.json @@ -9,14 +9,14 @@ "lib": ["dom", "dom.iterable", "dom.asynciterable", "deno.ns"] }, "imports": { - "@polyengine/runtime/embedder": "jsr:@polyengine/runtime@0.5.1/embedder", - "@polyengine/runtime/shim": "jsr:@polyengine/runtime@0.5.1/shim", - "@polyengine/protocol": "jsr:@polyengine/protocol@0.2.3", - "@polyengine/translator": "jsr:@polyengine/translator@0.5.1", - "@polyengine/wasi": "jsr:@polyengine/wasi@0.5.1", - "@polyengine/wasi/io": "jsr:@polyengine/wasi@0.5.1/io", - "@polymorph/webrtc-datachannels": "jsr:@polymorph/webrtc-datachannels@0.5.0", - "@polymorph/websocket": "jsr:@polymorph/websocket@0.5.0" + "@polyengine/runtime/embedder": "jsr:@polyengine/runtime@0.6.3/embedder", + "@polyengine/runtime/shim": "jsr:@polyengine/runtime@0.6.3/shim", + "@polyengine/protocol": "jsr:@polyengine/protocol@0.3.1", + "@polyengine/translator": "jsr:@polyengine/translator@0.6.3", + "@polyengine/wasi": "jsr:@polyengine/wasi@0.6.3", + "@polyengine/wasi/io": "jsr:@polyengine/wasi@0.6.3/io", + "@polymorph/webrtc-datachannels": "jsr:@polymorph/webrtc-datachannels@0.6.0", + "@polymorph/websocket": "jsr:@polymorph/websocket@0.6.0" }, "tasks": { "check": "deno check ." diff --git a/experiments/iroh-relay-ws/host/deno.lock b/experiments/iroh-relay-ws/host/deno.lock index 8c1fff4..e1ab386 100644 --- a/experiments/iroh-relay-ws/host/deno.lock +++ b/experiments/iroh-relay-ws/host/deno.lock @@ -1,53 +1,52 @@ { "version": "5", "specifiers": { - "jsr:@polyengine/protocol@0.2.3": "0.2.3", - "jsr:@polyengine/protocol@~0.2.2": "0.2.3", - "jsr:@polyengine/protocol@~0.2.3": "0.2.3", - "jsr:@polyengine/runtime@0.5.1": "0.5.1", - "jsr:@polyengine/runtime@~0.5.1": "0.5.1", - "jsr:@polyengine/translator@0.5.1": "0.5.1", - "jsr:@polyengine/wasi@0.5.1": "0.5.1", - "jsr:@polymorph/webrtc-datachannels@0.5.0": "0.5.0", - "jsr:@polymorph/websocket@0.5.0": "0.5.0", + "jsr:@polyengine/protocol@0.3.1": "0.3.1", + "jsr:@polyengine/protocol@~0.3.1": "0.3.1", + "jsr:@polyengine/runtime@0.6.3": "0.6.3", + "jsr:@polyengine/runtime@~0.6.3": "0.6.3", + "jsr:@polyengine/translator@0.6.3": "0.6.3", + "jsr:@polyengine/wasi@0.6.3": "0.6.3", + "jsr:@polymorph/webrtc-datachannels@0.6.0": "0.6.0", + "jsr:@polymorph/websocket@0.6.0": "0.6.0", "npm:node-datachannel@0.32.3": "0.32.3", "npm:playwright@^1.62.1": "1.62.1", "npm:werift@0.22.2": "0.22.2" }, "jsr": { - "@polyengine/protocol@0.2.3": { - "integrity": "e3f0ac4165eb691d7231164ce28cf75e275c99496aa538e032297febdc52b371" + "@polyengine/protocol@0.3.1": { + "integrity": "3cba0ded857c5cc911fcf9c0782c7566c79af89ddc8e0ec4e48ece60c807a518" }, - "@polyengine/runtime@0.5.1": { - "integrity": "6337c94d623bc2013fdeb324a5206860a916b8897b39cf4bec65b1bf87c287d0", + "@polyengine/runtime@0.6.3": { + "integrity": "8f1ffc1c547793bc4cb3c1dec6a62c8cf0eb5cdb135b70e6df1fd042c6ec58f0", "dependencies": [ - "jsr:@polyengine/protocol@~0.2.3" + "jsr:@polyengine/protocol@~0.3.1" ] }, - "@polyengine/translator@0.5.1": { - "integrity": "16d7ac88997f89f10145cc109737b749bfebd37c9ea1aefe0a41b44c01b75586", + "@polyengine/translator@0.6.3": { + "integrity": "ccd0bb64ce3081d70b13e224c77e423faf7acf9953f62d4e0d2bab97c626c932", "dependencies": [ - "jsr:@polyengine/runtime@~0.5.1" + "jsr:@polyengine/runtime@~0.6.3" ] }, - "@polyengine/wasi@0.5.1": { - "integrity": "1cb71ff91c24415d85a3b15bbb35462757586fa1478febba605cab4c1b2dbe72", + "@polyengine/wasi@0.6.3": { + "integrity": "5c738fe95101f22e469346618e79ce261dd636a5d44e89fdcdd40c33d8c92e17", "dependencies": [ - "jsr:@polyengine/protocol@~0.2.3" + "jsr:@polyengine/protocol@~0.3.1" ] }, - "@polymorph/webrtc-datachannels@0.5.0": { - "integrity": "fef8803ef87826ce8c5cc6545460ce2e41ef63d5c31d10f63e9fb0666a752734", + "@polymorph/webrtc-datachannels@0.6.0": { + "integrity": "3cac84fe625177154ebd5a792548963a7381710998bfe94acd5170680f7bd227", "dependencies": [ - "jsr:@polyengine/protocol@~0.2.2", + "jsr:@polyengine/protocol@~0.3.1", "npm:node-datachannel", "npm:werift" ] }, - "@polymorph/websocket@0.5.0": { - "integrity": "84a7862e9bdeaedca92f7b57b12f5ee1348878734906feebb4d37634ac6659ae", + "@polymorph/websocket@0.6.0": { + "integrity": "8e27a2603479d76edcc8c9a3bbfd22d05663da34e9bbdf4ad1326cf18d610c6c", "dependencies": [ - "jsr:@polyengine/protocol@~0.2.2" + "jsr:@polyengine/protocol@~0.3.1" ] } }, @@ -625,12 +624,12 @@ }, "workspace": { "dependencies": [ - "jsr:@polyengine/protocol@0.2.3", - "jsr:@polyengine/runtime@0.5.1", - "jsr:@polyengine/translator@0.5.1", - "jsr:@polyengine/wasi@0.5.1", - "jsr:@polymorph/webrtc-datachannels@0.5.0", - "jsr:@polymorph/websocket@0.5.0" + "jsr:@polyengine/protocol@0.3.1", + "jsr:@polyengine/runtime@0.6.3", + "jsr:@polyengine/translator@0.6.3", + "jsr:@polyengine/wasi@0.6.3", + "jsr:@polymorph/webrtc-datachannels@0.6.0", + "jsr:@polymorph/websocket@0.6.0" ], "packageJson": { "dependencies": [ diff --git a/host-polyengine/README.md b/host-polyengine/README.md index a5c554a..4067ee4 100644 --- a/host-polyengine/README.md +++ b/host-polyengine/README.md @@ -47,13 +47,14 @@ guest's and is latent on every host. ## The pin polyengine and the sibling host modules arrive from JSR under caret -constraints on one minor line: the `@polyengine/{runtime,translator,wasi}@^0.5.1` -lockstep family (0.5.1 is a floor, not a convenience: the endpoint's -dial timeouts drop in-flight import futures, which polyengine handles as -a prompt discard only from 0.5.1 — A23; under 0.5.0 the drop wedges the -store, polyengine#239), plus `@polyengine/protocol@^0.2.2` (versioned independently +constraints on one minor line: the `@polyengine/{runtime,translator,wasi}@^0.6.3` +lockstep family (the line's floor has been ≥0.5.1 since A23, not a +convenience: the endpoint's dial timeouts drop in-flight import futures, +which polyengine handles as a prompt discard only from 0.5.1 — A23; under +0.5.0 the drop wedges the store, polyengine#239), plus +`@polyengine/protocol@^0.3.1` (versioned independently of the lockstep family — the A22 host-ABI vocabulary line) and -`jsr:@polymorph/*@^0.5.0`. `deno.lock` pins the resolved versions and +`jsr:@polymorph/*@^0.6.0`. `deno.lock` pins the resolved versions and carries integrity, enforced with `--frozen`. `@polyengine/translator` ships the translator wasm for the same commit as the runtime, so the plan-format coupling between runtime and translator is self-consistent diff --git a/host-polyengine/deno.json b/host-polyengine/deno.json index 5b152fd..f95d1be 100644 --- a/host-polyengine/deno.json +++ b/host-polyengine/deno.json @@ -1,6 +1,6 @@ { "name": "@polymorph/iroh", - "version": "0.5.1", + "version": "0.6.0", "license": "Apache-2.0", "exports": { ".": "./src/mod.ts" }, "//": "MODULE-IDENTITY CONSTRAINT: this package instantiates the packaged endpoint component, so it still loads @polyengine/runtime/embedder — every consumer's resolver must still resolve exactly ONE @polyengine/runtime version for stateful-handle interop (a component instantiated under one embedder copy is refused by another). @polyengine/wasi@0.5.0 is protocol-only internally (A22) and the sibling @polymorph host modules (@polymorph/{webcrypto,websocket,webrtc-datachannels}@0.5.0) depend only on @polyengine/protocol — neither couples to @polyengine/runtime at all, so they no longer contribute to that constraint; @polyengine/protocol copies are harmless by construction (A22, contracts/embedder-api.md). Every dependency constraint here is a caret range on one minor line (published-package convention, polyengine's own precedent); deno.lock carries integrity, --frozen enforced in the repo. The exam gate (justfile: exam-polyengine) asserts the repo's deno.locks resolve to one @polyengine/runtime version and one @polyengine/protocol version, and pipes the resolved graph through scripts/polyengine-identity-gate.ts (one runtime module, no raw URLs). src/endpoint_component.ts is GENERATED by `just build-components` (gitignored; the publish workflow regenerates it) — the packaged endpoint component, base64 in the module graph. minimumDependencyAge keeps Deno's default supply-chain gate for everything else while letting same-day @polyengine/@polymorph publishes resolve.", @@ -10,13 +10,13 @@ "exclude": ["jsr:@polyengine/*", "jsr:@polymorph/*"] }, "imports": { - "@polyengine/runtime/embedder": "jsr:@polyengine/runtime@^0.5.1/embedder", - "@polyengine/protocol": "jsr:@polyengine/protocol@^0.2.2", - "@polyengine/translator": "jsr:@polyengine/translator@^0.5.1", - "@polyengine/wasi": "jsr:@polyengine/wasi@^0.5.1", - "@polymorph/webcrypto": "jsr:@polymorph/webcrypto@^0.5.0", - "@polymorph/websocket": "jsr:@polymorph/websocket@^0.5.0", - "@polymorph/webrtc-datachannels": "jsr:@polymorph/webrtc-datachannels@^0.5.0" + "@polyengine/runtime/embedder": "jsr:@polyengine/runtime@^0.6.3/embedder", + "@polyengine/protocol": "jsr:@polyengine/protocol@^0.3.1", + "@polyengine/translator": "jsr:@polyengine/translator@^0.6.3", + "@polyengine/wasi": "jsr:@polyengine/wasi@^0.6.3", + "@polymorph/webcrypto": "jsr:@polymorph/webcrypto@^0.6.0", + "@polymorph/websocket": "jsr:@polymorph/websocket@^0.6.0", + "@polymorph/webrtc-datachannels": "jsr:@polymorph/webrtc-datachannels@^0.6.0" }, "publish": { "exclude": ["src/run-endpoint.ts", "src/scenario.ts", "src/repo.ts", "!src/endpoint_component.ts"] diff --git a/host-polyengine/deno.lock b/host-polyengine/deno.lock index 1a11ad6..7f3bfcf 100644 --- a/host-polyengine/deno.lock +++ b/host-polyengine/deno.lock @@ -1,57 +1,56 @@ { "version": "5", "specifiers": { - "jsr:@polyengine/protocol@~0.2.2": "0.2.3", - "jsr:@polyengine/protocol@~0.2.3": "0.2.3", - "jsr:@polyengine/runtime@~0.5.1": "0.5.1", - "jsr:@polyengine/translator@~0.5.1": "0.5.1", - "jsr:@polyengine/wasi@~0.5.1": "0.5.1", - "jsr:@polymorph/webcrypto@0.5": "0.5.0", - "jsr:@polymorph/webrtc-datachannels@0.5": "0.5.0", - "jsr:@polymorph/websocket@0.5": "0.5.0", + "jsr:@polyengine/protocol@~0.3.1": "0.3.1", + "jsr:@polyengine/runtime@~0.6.3": "0.6.3", + "jsr:@polyengine/translator@~0.6.3": "0.6.3", + "jsr:@polyengine/wasi@~0.6.3": "0.6.3", + "jsr:@polymorph/webcrypto@0.6": "0.6.0", + "jsr:@polymorph/webrtc-datachannels@0.6": "0.6.0", + "jsr:@polymorph/websocket@0.6": "0.6.0", "npm:node-datachannel@0.32.3": "0.32.3", "npm:werift@0.22.2": "0.22.2" }, "jsr": { - "@polyengine/protocol@0.2.3": { - "integrity": "e3f0ac4165eb691d7231164ce28cf75e275c99496aa538e032297febdc52b371" + "@polyengine/protocol@0.3.1": { + "integrity": "3cba0ded857c5cc911fcf9c0782c7566c79af89ddc8e0ec4e48ece60c807a518" }, - "@polyengine/runtime@0.5.1": { - "integrity": "6337c94d623bc2013fdeb324a5206860a916b8897b39cf4bec65b1bf87c287d0", + "@polyengine/runtime@0.6.3": { + "integrity": "8f1ffc1c547793bc4cb3c1dec6a62c8cf0eb5cdb135b70e6df1fd042c6ec58f0", "dependencies": [ - "jsr:@polyengine/protocol@~0.2.3" + "jsr:@polyengine/protocol" ] }, - "@polyengine/translator@0.5.1": { - "integrity": "16d7ac88997f89f10145cc109737b749bfebd37c9ea1aefe0a41b44c01b75586", + "@polyengine/translator@0.6.3": { + "integrity": "ccd0bb64ce3081d70b13e224c77e423faf7acf9953f62d4e0d2bab97c626c932", "dependencies": [ "jsr:@polyengine/runtime" ] }, - "@polyengine/wasi@0.5.1": { - "integrity": "1cb71ff91c24415d85a3b15bbb35462757586fa1478febba605cab4c1b2dbe72", + "@polyengine/wasi@0.6.3": { + "integrity": "5c738fe95101f22e469346618e79ce261dd636a5d44e89fdcdd40c33d8c92e17", "dependencies": [ - "jsr:@polyengine/protocol@~0.2.3" + "jsr:@polyengine/protocol" ] }, - "@polymorph/webcrypto@0.5.0": { - "integrity": "b9b03e2855a83f8817bb9d6f6a0cb5ec261a4dd3c09c957b741eeb7eba639ef9", + "@polymorph/webcrypto@0.6.0": { + "integrity": "3157cf069c2d3591d215e07b617870c81f88ae9eebe737c74ec5daeddc44b8b5", "dependencies": [ - "jsr:@polyengine/protocol@~0.2.2" + "jsr:@polyengine/protocol" ] }, - "@polymorph/webrtc-datachannels@0.5.0": { - "integrity": "fef8803ef87826ce8c5cc6545460ce2e41ef63d5c31d10f63e9fb0666a752734", + "@polymorph/webrtc-datachannels@0.6.0": { + "integrity": "3cac84fe625177154ebd5a792548963a7381710998bfe94acd5170680f7bd227", "dependencies": [ - "jsr:@polyengine/protocol@~0.2.2", + "jsr:@polyengine/protocol", "npm:node-datachannel", "npm:werift" ] }, - "@polymorph/websocket@0.5.0": { - "integrity": "84a7862e9bdeaedca92f7b57b12f5ee1348878734906feebb4d37634ac6659ae", + "@polymorph/websocket@0.6.0": { + "integrity": "8e27a2603479d76edcc8c9a3bbfd22d05663da34e9bbdf4ad1326cf18d610c6c", "dependencies": [ - "jsr:@polyengine/protocol@~0.2.2" + "jsr:@polyengine/protocol" ] } }, @@ -610,13 +609,13 @@ }, "workspace": { "dependencies": [ - "jsr:@polyengine/protocol@~0.2.2", - "jsr:@polyengine/runtime@~0.5.1", - "jsr:@polyengine/translator@~0.5.1", - "jsr:@polyengine/wasi@~0.5.1", - "jsr:@polymorph/webcrypto@0.5", - "jsr:@polymorph/webrtc-datachannels@0.5", - "jsr:@polymorph/websocket@0.5" + "jsr:@polyengine/protocol@~0.3.1", + "jsr:@polyengine/runtime@~0.6.3", + "jsr:@polyengine/translator@~0.6.3", + "jsr:@polyengine/wasi@~0.6.3", + "jsr:@polymorph/webcrypto@0.6", + "jsr:@polymorph/webrtc-datachannels@0.6", + "jsr:@polymorph/websocket@0.6" ] } } diff --git a/host-polyengine/src/harness.ts b/host-polyengine/src/harness.ts index ac8a33d..9ccf4b8 100644 --- a/host-polyengine/src/harness.ts +++ b/host-polyengine/src/harness.ts @@ -95,11 +95,6 @@ export interface EndpointInstanceOptions { readonly env?: Record; /** Component bytes to run instead of the packaged endpoint build. */ readonly componentBytes?: Uint8Array; - /** - * Mirror the guest's stdout/stderr to the console as it runs. The - * captured text is available either way via `stdout()`/`stderr()`. - */ - readonly guestLogPassthrough?: boolean; } export interface EndpointInstance { @@ -127,7 +122,6 @@ export async function newEndpointInstance( cli: { args: [`iroh-endpoint-${options.label}`], env: { ...options.env }, - passthrough: options.guestLogPassthrough ?? false, }, }); const imports = { diff --git a/host-polyengine/src/run-endpoint.ts b/host-polyengine/src/run-endpoint.ts index 85063a8..22557fd 100644 --- a/host-polyengine/src/run-endpoint.ts +++ b/host-polyengine/src/run-endpoint.ts @@ -63,14 +63,12 @@ import { } from "./repo.ts"; // The exam always runs THIS TREE's freshly built component (repo.ts reads -// it from target/), never the packaged embed, and forwards the -// EXAM_GUEST_LOGS env knob the harness no longer reads ambiently. +// it from target/), never the packaged embed. async function newEndpointInstance( options: EndpointInstanceOptions, ): Promise { return await packageEndpointInstance({ componentBytes: await endpointComponentBytes(), - guestLogPassthrough: Deno.env.get("EXAM_GUEST_LOGS") === "1", ...options, }); }