diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ecc034c..35818e2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,6 +12,19 @@ pnpm install Running `pnpm install` automatically sets up [Lefthook](https://github.com/evilmartians/lefthook) git hooks, which enforce code quality and commit message standards. +### Node versions + +Two different floors apply, and they are not the same number: + +| Where | Node | Why | +| --------------------------------- | ------- | -------------------------------------------------------------------------- | +| **Developing this repo** | ≥ 22.13 | pnpm 11 loads the `node:sqlite` builtin, which does not exist before 22.13 | +| **Consuming a published package** | ≥ 20 | What the shipped bundles actually require at runtime | + +The root `package.json` is `private: true`, so its `engines.node` (`>=22.13`) constrains contributors only. The six published packages declare `>=20` because that is what their built output needs — `scripts/smoke-test.mjs` loads every bundle and exercises the core API on Node 20 in CI, so the claim stays honest. + +Don't "fix" the mismatch by raising the packages to match the root. They describe different audiences. + ## Git Hooks This project uses Lefthook to run the following hooks automatically: @@ -87,3 +100,13 @@ BREAKING CHANGE: The `layers` option is now required. ``` 5. Commit using a conventional commit message 6. Submit a pull request + +## Releasing + +`pnpm release` runs [release-it](https://github.com/release-it/release-it), which derives the version bump and the `CHANGELOG.md` entry from the conventional commits since the last tag. Preview it without changing anything: + +```bash +npx release-it --dry-run +``` + +> **One-time note for the next release:** commit [`4c0a23c`](https://github.com/camcima/ziggurat/commit/4c0a23c) carries the footer `BREAKING CHANGE: minimum supported Node.js is now 22.13 (was 20).`, so the generated changelog will list it. That change only raised the **private root** `engines.node` and the CI runner — the published packages never dropped Node 20, and CI verifies they still work on it. Delete that one bullet from the generated `CHANGELOG.md` before completing the release, so it doesn't announce a consumer-facing break that never happened. This note can go away once that release has shipped. diff --git a/README.md b/README.md index 23c4c01..199a80b 100644 --- a/README.md +++ b/README.md @@ -150,9 +150,11 @@ See the [docs](docs/) directory for detailed guides: ## Requirements -- Node.js >= 20 +- Node.js >= 20 — verified in CI by loading the built bundles on Node 20 and 24 - TypeScript >= 5.x (recommended) +Contributing to this repository needs Node.js >= 22.13, since pnpm 11 does not run below that. See [CONTRIBUTING.md](CONTRIBUTING.md#node-versions). + ## Development ```bash