Embedded preview contract.
EP0-EP5 qualify one bounded Linux embedding contract. The milestone is concrete enough to trial, and narrow enough not to masquerade as a general JavaScript engine release.
171 / 171
Public observable cases pass through the candidate engine.
400 mutations
Deterministic mutations terminate without crashes or hangs.
250 evaluations
The frozen public-header-only C demonstration repeatedly evaluates and recovers.
Qualified surface
- Linux C11 and C++17 consumers through public ABI 0.1.
- Static library, SONAME shared library, CLI, pkg-config and CMake metadata.
- Primitive, object and array host values with explicit runtime-owned handles.
- Globals, host-to-JavaScript calls and synchronous native callbacks with host data.
- Catchable native errors, retrievable thrown values and located stack text.
- Instruction, call-stack and cumulative allocation limits with success-after-failure recovery.
- ASan/UBSan candidate runs and isolated static/shared consumer builds.
Frozen exit demonstration
public js.h only
+ structured host input
+ native callback and closure
+ array callback
+ located Error retrieval
+ instruction/allocation containment
+ successful recovery
+ clean teardown
Not claimed
No general ES2022 conformance percentage, Test262 pass rate, stable ABI, Windows/macOS package, async cancellation, worker safety, module loader, promises/jobs, browser APIs, Node APIs or security sandbox is claimed.
Evidence after the preview freeze
PC0V external Valgrind confirmation is complete. The independent suite now also keeps a 26/26 lossless frontend corpus and a pinned 12/12 real-bundle frontend certification. JRS8 pins a selected Test262 contract and runner, but no Test262 percentage is claimed because the pinned upstream corpus was not available in the last evidence workspace. PC0P remains the second-platform package gate.
Next engine slice
The evidence decision is now explicit: JS11A is bounded class runtime semantics, followed by JS11B jobs/promises/async and JS12 modules. Classes come first because their syntax boundaries are already stable and they do not require introducing the job queue or module-linking host contracts at the same time.