Skip to content
15 changes: 14 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,19 @@ jobs:
- run: pnpm run test:recovery
- run: pnpm audit --audit-level=high

floor:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38
with:
node-version: "24.4.0"
- run: corepack enable
- run: pnpm install --frozen-lockfile
- run: pnpm run test
- run: pnpm run build
- run: pnpm run test:recovery
Comment on lines +38 to +42

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Floor skips packaged artifact smoke

The floor job does not run test:package, so it does not continuously validate clean installation and execution of the generated package at Node 24.4.0; a floor-specific packaging or executable incompatibility can therefore pass the publish gate.

Suggested change
- run: pnpm install --frozen-lockfile
- run: pnpm run test
- run: pnpm run build
- run: pnpm run test:recovery
- run: pnpm install --frozen-lockfile
- run: pnpm run test
- run: pnpm run build
- run: pnpm run test:package
- run: pnpm run test:recovery
Prompt To Fix With AI
This is a comment left during a code review.
Path: .github/workflows/ci.yml
Line: 38-41

Comment:
**Floor skips packaged artifact smoke**

The floor job does not run `test:package`, so it does not continuously validate clean installation and execution of the generated package at Node 24.4.0; a floor-specific packaging or executable incompatibility can therefore pass the publish gate.

```suggestion
      - run: pnpm install --frozen-lockfile
      - run: pnpm run test
      - run: pnpm run build
      - run: pnpm run test:package
      - run: pnpm run test:recovery
```

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!


postgresql:
runs-on: ubuntu-latest
strategy:
Expand Down Expand Up @@ -127,7 +140,7 @@ jobs:

publish:
if: startsWith(github.ref, 'refs/tags/v')
needs: [quality, postgresql, mysql, browser, redis]
needs: [quality, floor, postgresql, mysql, browser, redis]
runs-on: ubuntu-latest
permissions:
contents: read
Expand Down
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# Changelog

## Unreleased

- Lower the supported Node.js floor from 24.15.0 to 24.4.0. Node.js 24.4.0 is
the first release that accepts `readBigInts` on the `DatabaseSync`
constructor, which the SQLite adapter needs to read 64-bit integers without
losing precision. Node.js 24.0.0 through 24.3.x ignore the option, and the
effect recovery and transaction retry tests fail there. A new CI job runs the
default suite, the build, and the recovery demo on the floor.
- Record that `node:sqlite` stays experimental until Node.js 24.15.0 and prints
a warning on stderr before it.

## 0.13.1 - 2026-08-16

- Back idle actor, effect, reminder, and broadcast polling off exponentially
Expand Down
4 changes: 3 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ lowest layer that can prove it.
## Setup

Install Node.js 24.15 or newer, enable Corepack, and install the locked
dependencies:
dependencies. The package supports Node.js 24.4.0 or newer and CI runs the
default suite on that floor, but 24.15 is where `node:sqlite` stops printing an
experimental warning:

```bash
corepack enable
Expand Down
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,9 @@ processes submit them concurrently.

## Run it now with SQLite

Node.js 24.15 or newer is required. The `0.13.1` release includes a
packaged quickstart:
Node.js 24.4.0 or newer is required. Node.js 24.15 or newer is preferred,
because `node:sqlite` prints an experimental warning before it. The `0.13.1`
release includes a packaged quickstart:
Comment on lines +63 to +65

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Pinned quickstart requires newer Node

When a user on Node 24.4.0–24.14.x runs the documented quickstart with npm engine-strict enabled, the command installs solid-objects@0.13.1, whose engine constraint remains >=24.15.0, causing npm to reject the installation despite the new stated minimum.

Prompt To Fix With AI
This is a comment left during a code review.
Path: README.md
Line: 60-62

Comment:
**Pinned quickstart requires newer Node**

When a user on Node 24.4.0–24.14.x runs the documented quickstart with npm engine-strict enabled, the command installs `solid-objects@0.13.1`, whose engine constraint remains `>=24.15.0`, causing npm to reject the installation despite the new stated minimum.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.


```bash
npm exec --yes --package=solid-objects@0.13.1 -- solid-objects quickstart
Expand Down Expand Up @@ -255,7 +256,8 @@ edge placement, cross-identity transactions, and operational data access—is in

## Requirements and supported systems

- Node.js 24.15 or newer
- Node.js 24.4.0 or newer; 24.15 or newer to avoid the `node:sqlite`
experimental warning
- TypeScript 5.9 or newer for TypeScript applications
- SQLite through `node:sqlite`, PostgreSQL 14 or newer, or MySQL 8.0 or newer
with InnoDB
Expand Down
13 changes: 12 additions & 1 deletion docs/support.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

| Component | Supported or tested range |
| -------------- | ----------------------------------------------------------- |
| Node.js | 24.15 or newer; CI uses 24.15 |
| Node.js | 24.4.0 or newer; CI runs 24.4.0 and 24.15.0 |
| TypeScript | 5.9 or newer for TypeScript applications |
| SQLite | Node's built-in `node:sqlite` on the supported Node runtime |
| PostgreSQL | 14 or newer; CI runs 14 and 18 |
Expand All @@ -15,6 +15,17 @@
The package is ESM-only. PostgreSQL, MySQL, and Redis require their optional
peer dependency. SQLite has no driver dependency beyond Node.js.

The Node.js floor is 24.4.0 because the SQLite adapter reads integer columns as
`BigInt`. Node.js 24.4.0 is the first release that accepts `readBigInts` on the
`DatabaseSync` constructor. Node.js 24.0.0 through 24.3.x ignore the option and
return `Number`, which loses precision on 64-bit values and fails the effect
recovery and transaction retry tests.

Node.js 24.15.0 is the first release where `node:sqlite` is no longer
experimental. Between 24.4.0 and 24.14.x the module works but prints
`ExperimentalWarning: SQLite is an experimental feature` on stderr, and its API
can change. Prefer 24.15.0 or newer where the choice is free.

## What the matrix covers

The default suite exercises actor definitions, mailbox ordering, state
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"url": "git+https://github.com/cardmagic/solid-objects-js.git"
},
"engines": {
"node": ">=24.15.0"
"node": ">=24.4.0"
},
"packageManager": "pnpm@11.11.0",
"bin": {
Expand Down