- wasm/ crate with wasm-bindgen bindings mirroring the lib API
(formatFromBytes/Extension/Path, toMarkdownBytes, toDocument)
- static demo page under wasm/www, deployed to GitHub Pages on push
- @firecrawl/anydoc-wasm published from release.yml with provenance
- wasm job in CI: clippy on the wasm target plus a Node smoke test
- version guard now spans five locations (wasm/Cargo.toml added)
napi prepublish no longer creates the release as a side effect of the
npm publish (--no-gh-release, so that job drops contents: write). A final
job, gated on all three registry publishes, creates the release with
generated notes and uploads every built artifact.
JavaScript actions cannot run inside Alpine containers on arm64 runners,
so the aarch64-musl container: jobs failed before their first step. Run
all four Linux test flavors with docker run on the host instead.
Clean-room rewrite. The release gate moves to scripts/check-versions.sh
(also runnable locally), npm publishing runs on a GitHub-hosted runner so
every package gets a provenance attestation, workflow_dispatch on Release
is now a full no-publish dry run, and both workflows default to read-only
permissions.
The crates.io liveness probe hit the API without a User-Agent (403) and fell through to a doomed publish: probe the sparse index instead. npm rejects provenance from self-hosted runners: publish from a GitHub-hosted one. setup-python's universal2 macOS build launches as arm64 on Apple silicon, where pip rejects the x86_64 wheel: run the x64 test through Rosetta.