- `code` on the rejection names the ConvertError variant, so callers
branch on it rather than on the message text
- napi fills `code` from the error's status, so the rejection is rebuilt
in Task::reject, the one place with an Env to build a JS error with
- ConvertErrorCode reaches index.d.ts through a dts header file, which
survives regeneration
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.