v2.20.0
v2.20.0
Released: 2026-09-20
Features
move the over-ceiling opt-in from an env var to
--allow-over-ceiling(a358d48f)The local escape hatch for Mac-vs-CI codegen drift is now a build argument rather than the
ZFB_MD_WASM_ALLOW_OVER_CEILINGenvironment variable. An exported variable also softened this package'sprepublishOnly→pnpm build, so a hand-rolled localpnpm publishcould ship artifacts that had never been held to their ceilings — a build the opt-in was never aimed at. The flag is read only frombuild.mjs's own CLI entry, so it cannot be inherited from an ambient environment.pnpm test:md-wasm:localpasses the flag for you;pnpm test:md-wasmstays strict and is unchanged. The flag is still refused outright wheneverCIis set, so it can never green a PR gate. The retired env var is now ignored and emits a loud warning naming the replacement, so a stale shell export fails visibly rather than silently doing nothing.
Bug Fixes
collect-then-fail on build ceilings instead of throwing on the first breach (6178015f)
The build summary threw as soon as one artifact exceeded its gzip-9 ceiling, hiding the other three artifacts' numbers. The complete four-artifact summary now always prints first, then any warnings, then a single failure naming every breach.
refuse the over-ceiling opt-in before the four-artifact build, not after it (6bc594e6)
A CI run carrying the opt-in previously burned the full ~15-minute build before hitting the refusal. One policy object now feeds both the early refusal and the final report, so the two messages cannot drift apart.
Other Changes
Shipped artifacts: sizes are unchanged in this release —
shipped-sizes.jsonand its synced documentation tables were not touched, and no code change here moves the compiled bytes. All four SHA-256 digests still change, as they do in every release: each.wasmembedsZFB_RELEASE_VERSION, so the digests move even when the compiled code and the byte sizes do not. If you pin digests, re-pin them.