Skip to content

Design: upstream jco node/browser driver layer (execution topologies survey) #59

Description

@lann

Deferred half of the consumer-glue consolidation (see the bin/helpers issue and umbrella on #14). Each consumer built a jco driver over @polymorph/component-test-js/harness, and the topologies genuinely differ:

  • webcrypto (conformance/driver-ct/jco/runner.mjs, worker-node.mjs, run-browser.mjs, worker-browser.mjs): worker-thread / Web-Worker pools striping ~19k cases, fresh instance per case (JSPI attempts cannot be cancelled), content-stamp + flock transpile guard, Playwright page harness with heartbeat stall watchdog, findChrome() ladder.
  • websocket (run-node.mjs, run-browser.mjs, harness.mjs): sequential (loopback-I/O-bound corpus; sidesteps Chromium per-endpoint handshake serialization), suite-owned echod spawn, env-carried config.
  • webrtc (run.mjs, run-browser.mjs, harness.mjs): drivers are children of a Rust orchestrator — JSONL on stdout, role/run-id env contract, --select prefix, same-origin reverse proxy for the browser mailbox.

What is provably common: transpiled-module loading, import binding, envelope emission, per-case timeout handling, the browser page-driver skeleton (static server + import map + Chromium + watchdog). What varies: concurrency/instance policy, SUT host modules and their config, child-process vs in-process contract.

Decision deferred until (a) the shared-parts issue lands and shrinks the residue, and (b) a fourth consumer arrives (tls's jco leg, blocked on lann/jco#34 + lann/jco#35) to test any proposed seam against. Generalizing the driver from n=3 with live divergence risks an abstraction the next consumer immediately breaks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    designDecisions about the contract itself

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions