Frame payload npm consumer

August 30, 2026 ยท View on GitHub

This consumer uses only the generated owned-data npm package. From the repository root, build the canonical Project-v8 manifest and execute the shared hostile corpus:

cargo run --locked -p semaprax-toolchain --bin semaprax-full -- build --manifest-path examples/frame-payload-project/semaprax.toml --target npm -o examples/frame-payload-web/generated
cp examples/frame-payload-project/corpus.json examples/frame-payload-web/corpus.json
node examples/frame-payload-web/consumer.mjs

Use the unpublished full toolchain explicitly: Windows Project-v8 npm publication rejects the standalone compiler with SPX-W120. The checked-in examples/frame-payload-web parent already exists; generated must not exist. Release archives expose the full CLI under the semaprax name instead.

The generated directory is evidence output and must not be committed. The TypeScript consumer pins stable-ID access through runtime.functions["frame.payload-result"]; a source display rename cannot change that access path.

corpus-runner.mjs is the shared browser-neutral full-corpus runner used by consumer.mjs and the actual index.html/browser.mjs browser entry. Node evidence is not browser evidence. The separate provisioned Chromium gate executes both baseline and renamed packages without installing tooling.

Select strict TypeScript evidence explicitly with an already provisioned TypeScript 5.8.3 executable (the repository-pinned tool is reused):

TSC="$PWD/platform-tests/wasm-scalar-browser-v1/node_modules/.bin/tsc" cargo test --locked -p semaprax --test frame_payload_product_v1 consumer_acceptance::strict_typescript_accepts_both_display_names_and_rejects_wrong_types -- --ignored --exact

On Windows, set TSC to the provisioned tsc.cmd. The selected gate fails if the compiler is absent or has the wrong version; it does not download or silently skip. It checks the real consumer in strict mode against both generated packages and requires specific diagnostics for invalid argument and unchecked Result-union access. These gates are authored, unrun, and are not selected by any newly modified hosted workflow.