• Pick the bridge the loader instantiates. This is the wasm-artefact SELECTOR (distinct from the main-bundle host-capability probe detectBridge() / detectFeatures() in src/bridge.ts).

    wasmgc-classic is the ONLY bridge this package builds, vendors or ships. This selector resolves to it on every host that passes the causl/causl-wasm-ts#426 floor probe below, and refuses (typed, loud) on hosts that fail it. Its classic-strings build needs no wasm:js-string host support, so it instantiates on every host at or above the declared floor.

    wasmgc-builtins is RETIRED, not merely unpacked. #147 dropped it from package.json#files while leaving it vendored and pinnable, on the reading that it was a working bridge nobody had a probe for. It was not: causl/causl-core-rs#210 measured its wasm:js-string imports as i32-typed where the W3C builtins are externref-typed, so the artefact is rejected by WebAssembly.compile(bytes, { builtins: ['js-string'] }) on every host and always was. causl/causl-core-rs#355 removed the vendored tree, the build row and the artefact-path mapping here; assertBridgeIsShipped refuses the id at selection time and says why. See RETIRED_BUILTINS_BRIDGE_IDS.

    The retirement is not a verdict that the tier is a bad idea, and it is not permanent by construction. causl/causl-core-rs#358 is the work that would make the bridge loadable: retyping the eleven wasm:js-string imports to genuine externref on the engine side, either by moving them onto wasm-bindgen's descriptor-driven ABI or by a post-link retype pass. If that lands, this selector gets a second artefact back and the host probe above gets something to choose between.

    The chosen bridge string is what wasmUrlFor() keys on; the gc-classic artifact directory mirrors the BridgeId value exactly. The legacy serde-json bridge was retired with the split-crate engine_rs lineage (issue #10).

    causl/causl-wasm-ts#426 resolved the iasbuilt/causl#691 placeholder by making this selector PROBE rather than by deleting it. With one artefact there is nothing to pick BETWEEN, but under the 0.5.0 throw-instead-of-degrade policy there is still a real decision here: whether this host is one the shipped artefact can validate on at all. The old constant answered 'wasmgc-classic' on every host, including hosts whose WebAssembly validates nothing, so the selection that decides support was not a decision. Now it is: the probe below validates a 56-byte module that uses exactly the artefact's measured minimal feature set, and a host that refuses it gets the typed WasmEngineUnavailableError naming the declared floor (WASM_HOST_FLOOR_REFUSAL) BEFORE any 720 KB artefact fetch.

    The probe is NOT a WasmGC sniff, deliberately. src/bridge.ts carries a 12-byte ref.null any probe, but test/host-failure-contract-275.test.ts cell (A) measured the shipped artefact as declaring ZERO WasmGC struct/array/rec-group types, so GC heap types are not what the artefact needs. What it needs, per the wasm-tools feature bisect recorded on WASM_HOST_FLOOR in src/wasm-registry.ts, is typed function references ((ref $t) params, call_ref) plus reference types, bulk memory, sign-extension and non-trapping float-to-int. The probe module uses all five and nothing else, so its verdict tracks the artefact rather than a proposal the artefact does not use.

    An explicitly pinned options.bridge skips this probe at every call site (options.bridge ?? (await detectBridge())), which is the documented escape hatch for a host the probe misjudges: the loader's own WebAssembly.compile of the real artefact remains the final arbiter there, classified by isWasmCapabilityError on the #108 preload path.

    #280 — the compile-reject classification USED to feed the §18A.13.1 capability fallback (loud one-time warn/telemetry, then a pure-TS graph). It no longer does: 0.5.0 withdrew the fallback, so both this probe's refusal and the loader's compile reject surface as WasmEngineUnavailableError (CAUSL_WASM_ENGINE_UNAVAILABLE). The probe feeds no degrade decision; it moves the SAME refusal earlier and names the floor while doing so.

    Returns Promise<BridgeId>

    WasmEngineUnavailableError when this host refuses the floor-probe module (or exposes no usable WebAssembly at all).