Release 0.2.1 at 9f9e4d5.
Patch release: the js/runner-polyengine leg consumes the polyengine v0.4.0 release (@polyengine/{runtime,translator,wasi,ct-runner}@0.4.0; @polyengine/protocol 0.2.1 via its own range). The package's own exports and behavior are unchanged — upstream's one breaking change (the A19 err-result brand-key rename) is internal to the engine and unobservable from this runner. The Rust crates are unchanged; the bump-together contract names this commit as the release rev for cargo pins.
Still 0.x/unstable, but caret-honest: releases within a minor line stay compatible; breaking changes bump the minor.