Skip to content

M1: three realms, one TodoMVC - #150

Merged
lannbot merged 3 commits into
mainfrom
m1/three-realms
Sep 6, 2026
Merged

M1: three realms, one TodoMVC#150
lannbot merged 3 commits into
mainfrom
m1/three-realms

Conversation

@lannbot

@lannbot lannbot commented Sep 6, 2026

Copy link
Copy Markdown
Collaborator

Runtime component in the SharedWorker (kernel crate: device, app registry with asset re-hashing, in-memory tasks, long-poll events, apps.abort), visor component (Dioxus over stream-dom; voices as types; strip + Apps/Settings tenants), TodoMVC app component over polyvisor:app/tasks, and the glue: boot.ts/worker.ts/frame.ts, WIT-over-MessagePort RPC, the frame policy on stream-dom's Policy, hash-pinned srcdoc loader with default-src 'none', build + translate, e2e.

Gates: just ci green; deno task e2e 5/5 — boot, open-app (opaque frame; strip geometry immobile), todo-roundtrip (through the worker, survives a tab reload with a second tab holding the worker), frame-network-dead (zero requests from the frame), instantiates-without-jspi.

Two findings recorded in docs/design.md:

Deferred to M2: the browser-level frame-teardown scenario (needs a hostile fixture component; the path was exercised by the policy catching the example's outbound href).

Automerge armed.

The runtime component (kernel crate + world) boots in a SharedWorker
over a kv import and wasi:http, serves device state, the app registry
(bundles fetched from the home origin, assets re-hashed), in-memory
tasks per app, and a long-poll event export; app sessions get a bound
MessagePort that reaches exactly the tasks mirror and the three asset
calls. The visor component (Dioxus over stream-dom) renders the strip
and two drawer tenants with voices as types; the TodoMVC app component
keeps its state in the tasks service. Glue: boot/worker/frame, a WIT-
over-MessagePort proxy, the frame policy, the hash-pinned srcdoc loader,
build + translate, five Playwright scenarios.

Found on the way and recorded in docs/design.md: generate! must not set
async: true (the translator, not wasm-tools, catches the async lowering
of a sync WIT function); and a polyengine liveness bug — a parked
driver's stale pendingHostCalls snapshot — fixed upstream (#289) and
consumed here at that git revision with the pre-<sha> translator asset.
@lannbot
lannbot enabled auto-merge September 6, 2026 23:24
@lannbot
lannbot merged commit b1ff062 into main Sep 6, 2026
2 checks passed
@lannbot
lannbot deleted the m1/three-realms branch September 6, 2026 23:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants