polyengine 0.6.7: the parking events.next returns; #292 workaround deleted - #163
Merged
Conversation
…leted
polyengine 0.6.6 fixed #292 (an async export parked on a guest-internal
waker with no host call outstanding stays pending instead of trapping as
a deadlock), and 0.6.7 fixes the lift regression that fix introduced
(#312: the lift re-derived its done() verdict after the driver exited,
racing the settlement pump; polyvisor's `lifecycle.boot` never resolved
on a reload with a bound store). This tree pins ^0.6.7.
With that, the first design comes back: the runtime exports a parking
`events.next` and the worker runs one pump over it, fanning each event
into every tab's queue. `interface event-source` and its `drain`, the
worker's `draining()` wrapper around every dispatched export, and the
kernel's drain-only queue are deleted. Consequence stated in design.md
rule 4: an event born of network activity alone — the other device
confirming a pairing, an enrollment landing — reaches the screen with
nothing pressed on this device. The e2e pairing helpers drop the Refresh
presses that existed only to carry those phases across, so the suite
now exercises the push path; `waitInDevices` takes a required
`{ refresh }` so each wait states whether its value is pushed or pulled.
Also: `web/fetch-endpoint.ts` derives the `@polymorph/iroh` version from
the resolved specifier instead of a hand pin — the lock had moved to
0.6.1 while the cached endpoint artifact was still 0.6.0 under a
hard-coded name. `just compose` plugs a stable, version-free path. The
lock's @polymorph/{iroh,webcrypto,websocket} 0.6.0 -> 0.6.1 moves ride
along deliberately (within the declared ^0.6 range; e2e green).
lannbot
enabled auto-merge
September 7, 2026 16:18
…rror A caller that is waiting FOR a failure (pairing-declined-aborts-both accepts "the other device went away") read the sheet before the error rendered; the harness then read it after and threw on the very text the wait was for. Seen on CI and once locally, independent of the runtime version.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
polyengine 0.6.6 fixed #292 (an async export parked on a guest-internal
waker with no host call outstanding stays pending instead of trapping as
a deadlock), and 0.6.7 fixes the lift regression that fix introduced
(#312: the lift re-derived its done() verdict after the driver exited,
racing the settlement pump; polyvisor's
lifecycle.bootnever resolvedon a reload with a bound store). This tree pins ^0.6.7.
With that, the first design comes back: the runtime exports a parking
events.nextand the worker runs one pump over it, fanning each eventinto every tab's queue.
interface event-sourceand itsdrain, theworker's
draining()wrapper around every dispatched export, and thekernel's drain-only queue are deleted. Consequence stated in design.md
rule 4: an event born of network activity alone — the other device
confirming a pairing, an enrollment landing — reaches the screen with
nothing pressed on this device. The e2e pairing helpers drop the Refresh
presses that existed only to carry those phases across, so the suite
now exercises the push path;
waitInDevicestakes a required{ refresh }so each wait states whether its value is pushed or pulled.Also:
web/fetch-endpoint.tsderives the@polymorph/irohversion fromthe resolved specifier instead of a hand pin — the lock had moved to
0.6.1 while the cached endpoint artifact was still 0.6.0 under a
hard-coded name.
just composeplugs a stable, version-free path. Thelock's @polymorph/{iroh,webcrypto,websocket} 0.6.0 -> 0.6.1 moves ride
along deliberately (within the declared ^0.6 range; e2e green).
Upstream: polymorph-components/polyengine#312 (merged, released as 0.6.7), #313 filed for a latent
backgroundCompletionissue.Gates:
just check,cargo test --workspace,deno test -A web/,deno task e2e16/16 twice on 0.6.7 (plus once more after the fetch-endpoint change).Automerge armed.