Skip to content

Commit da95333

Browse files
Ralphcursoragent
andcommitted
fix(ci): Node 22.16 + FTS5; Vitest audit-health/event-log tests; changelog
- Pin CI/security to Node 22.16 (node:sqlite + FTS5, nodejs/node#57621) - engines, .nvmrc, docs: require >=22.16.0 - Tests: storageGrowth nulls vs expect.anything(); EventLog CHECK relaxed - CHANGELOG [Unreleased]: cron exit validation (#1203) + Node bump - Biome-format cron exit validator / harness / install paths Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 3141a0c commit da95333

20 files changed

Lines changed: 75 additions & 95 deletions

.github/workflows/ci.yml

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ jobs:
5454
strategy:
5555
matrix:
5656
include:
57-
# Install >=22.12 (node:sqlite / engines); keep job name "Node 22" for branch protection.
58-
- node-version: '22.12'
57+
# Install >=22.16 (node:sqlite + FTS5; see nodejs/node#57621); keep job name "Node 22" for branch protection.
58+
- node-version: '22.16'
5959
job-name-suffix: '22'
6060
- node-version: '24'
6161
job-name-suffix: '24'
@@ -84,7 +84,7 @@ jobs:
8484
strategy:
8585
matrix:
8686
include:
87-
- node-version: '22.12'
87+
- node-version: '22.16'
8888
job-name-suffix: '22'
8989
- node-version: '24'
9090
job-name-suffix: '24'
@@ -113,7 +113,7 @@ jobs:
113113
strategy:
114114
matrix:
115115
include:
116-
- node-version: '22.12'
116+
- node-version: '22.16'
117117
job-name-suffix: '22'
118118
- node-version: '24'
119119
job-name-suffix: '24'
@@ -143,14 +143,14 @@ jobs:
143143
- uses: actions/checkout@v6
144144
- uses: actions/setup-node@v6
145145
with:
146-
node-version: '22.12'
146+
node-version: '22.16'
147147
- name: Cache node_modules
148148
uses: actions/cache@v5
149149
with:
150150
path: extensions/memory-hybrid/node_modules
151-
key: ${{ runner.os }}-node-22.12-${{ hashFiles('extensions/memory-hybrid/package-lock.json') }}
151+
key: ${{ runner.os }}-node-22.16-${{ hashFiles('extensions/memory-hybrid/package-lock.json') }}
152152
restore-keys: |
153-
${{ runner.os }}-node-22.12-
153+
${{ runner.os }}-node-22.16-
154154
- name: Install dependencies
155155
run: cd extensions/memory-hybrid && npm install
156156
- name: Run tests with coverage
@@ -172,14 +172,14 @@ jobs:
172172
- uses: actions/checkout@v6
173173
- uses: actions/setup-node@v6
174174
with:
175-
node-version: '22.12'
175+
node-version: '22.16'
176176
- name: Cache node_modules
177177
uses: actions/cache@v5
178178
with:
179179
path: extensions/memory-hybrid/node_modules
180-
key: ${{ runner.os }}-node-22.12-${{ hashFiles('extensions/memory-hybrid/package-lock.json') }}
180+
key: ${{ runner.os }}-node-22.16-${{ hashFiles('extensions/memory-hybrid/package-lock.json') }}
181181
restore-keys: |
182-
${{ runner.os }}-node-22.12-
182+
${{ runner.os }}-node-22.16-
183183
- name: Install dependencies
184184
run: cd extensions/memory-hybrid && npm install
185185
- name: Run knip
@@ -196,7 +196,7 @@ jobs:
196196
fetch-depth: 0
197197
- uses: actions/setup-node@v6
198198
with:
199-
node-version: '22.12'
199+
node-version: '22.16'
200200
- name: Install dependencies
201201
run: cd extensions/memory-hybrid && npm ci
202202
- name: Check formatting
@@ -213,14 +213,14 @@ jobs:
213213
- uses: actions/checkout@v6
214214
- uses: actions/setup-node@v6
215215
with:
216-
node-version: '22.12'
216+
node-version: '22.16'
217217
- name: Cache node_modules
218218
uses: actions/cache@v5
219219
with:
220220
path: extensions/memory-hybrid/node_modules
221-
key: ${{ runner.os }}-node-22.12-${{ hashFiles('extensions/memory-hybrid/package-lock.json') }}
221+
key: ${{ runner.os }}-node-22.16-${{ hashFiles('extensions/memory-hybrid/package-lock.json') }}
222222
restore-keys: |
223-
${{ runner.os }}-node-22.12-
223+
${{ runner.os }}-node-22.16-
224224
- name: Install and build (dist/ required by verify-publish)
225225
run: cd extensions/memory-hybrid && npm ci && npm run build
226226
- name: verify-publish invariants
@@ -236,14 +236,14 @@ jobs:
236236
- uses: actions/checkout@v6
237237
- uses: actions/setup-node@v6
238238
with:
239-
node-version: '22.12'
239+
node-version: '22.16'
240240
- name: Cache node_modules
241241
uses: actions/cache@v5
242242
with:
243243
path: extensions/memory-hybrid/node_modules
244-
key: ${{ runner.os }}-node-22.12-${{ hashFiles('extensions/memory-hybrid/package-lock.json') }}
244+
key: ${{ runner.os }}-node-22.16-${{ hashFiles('extensions/memory-hybrid/package-lock.json') }}
245245
restore-keys: |
246-
${{ runner.os }}-node-22.12-
246+
${{ runner.os }}-node-22.16-
247247
- name: Install dependencies
248248
run: cd extensions/memory-hybrid && npm install
249249
- name: Strict type check
@@ -262,7 +262,7 @@ jobs:
262262
fail-fast: false
263263
matrix:
264264
include:
265-
- node-version: '22.12'
265+
- node-version: '22.16'
266266
job-name-suffix: '22'
267267
- node-version: '24'
268268
job-name-suffix: '24'

.github/workflows/security.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
- name: Setup Node.js
3030
uses: actions/setup-node@v6
3131
with:
32-
node-version: '22.12'
32+
node-version: '22.16'
3333
cache: 'npm'
3434
cache-dependency-path: 'extensions/memory-hybrid/package-lock.json'
3535

.nvmrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
22.12.0
1+
22.16.0

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
2121

2222
## [Unreleased]
2323

24+
### Added
25+
26+
- **Cron exit ledger validation** ([#1203](https://github.com/markus-lassfolk/openclaw-hybrid-memory/issues/1203)): structured validation of maintenance step exit lines, `validate-cron-exit` CLI, bash harness guidance, and normalization of obsolete cron command references in managed job messages.
27+
28+
### Changed
29+
30+
- **Node.js**: Minimum version is now **22.16.0** so built-in `node:sqlite` includes **FTS5** (see [nodejs/node#57621](https://github.com/nodejs/node/pull/57621)); CI `.nvmrc` and `engines` updated accordingly.
31+
2432
---
2533

2634
## [2026.5.61] - 2026-05-07

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
[![CI](https://github.com/markus-lassfolk/openclaw-hybrid-memory/actions/workflows/ci.yml/badge.svg)](https://github.com/markus-lassfolk/openclaw-hybrid-memory/actions/workflows/ci.yml)
88
[![Documentation](https://img.shields.io/badge/docs-site-blue)](https://markus-lassfolk.github.io/openclaw-hybrid-memory/)
99
[![License: MIT](https://img.shields.io/github/license/markus-lassfolk/openclaw-hybrid-memory?style=flat-square)](LICENSE)
10-
[![Node.js](https://img.shields.io/badge/node-%E2%89%A522.12.0-brightgreen?style=flat-square)](https://nodejs.org)
10+
[![Node.js](https://img.shields.io/badge/node-%E2%89%A522.16.0-brightgreen?style=flat-square)](https://nodejs.org)
1111
[![OpenClaw](https://img.shields.io/badge/OpenClaw-v2026.3.8%2B-blue?style=flat-square)](https://github.com/openclaw/openclaw)
1212

1313
</div>

docs/QUICKSTART.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Get an agent that **remembers you** and **gets better at giving the right contex
2121

2222
Use `embedding.preferredProviders` for automatic failover between providers (e.g. `["ollama", "openai"]`). See [LLM-AND-PROVIDERS.md](LLM-AND-PROVIDERS.md#embedding-providers) for full details.
2323
- **Chat/completion** (optional for basic memory): needed for distillation, reflection, auto-classify, etc. Any provider the OpenClaw gateway supports works; optional **`llm`** config sets model preference lists. See [LLM-AND-PROVIDERS.md](LLM-AND-PROVIDERS.md).
24-
- **Node.js `>=22.12.0`** with npm (plugin `engines` field).
24+
- **Node.js `>=22.16.0`** with npm (plugin `engines` field).
2525

2626
---
2727

extensions/memory-hybrid/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Upgrade: `openclaw hybrid-mem upgrade` (then restart the gateway).
2424

2525
| Requirement | Notes |
2626
|-------------|--------|
27-
| **Node.js** | `>=22.12.0` (`engines` in `package.json`) |
27+
| **Node.js** | `>=22.16.0` (`engines` in `package.json`) |
2828
| **OpenClaw** | v2026.3.8+ (peer); current 2026.3.x recommended |
2929
| **Embeddings** | Required — OpenAI, Ollama, ONNX, or Google; see [LLM-AND-PROVIDERS.md](../../docs/LLM-AND-PROVIDERS.md) |
3030
| **Build toolchain** | For `@lancedb/lancedb`: C++ build tools + Python 3 on the install machine |

extensions/memory-hybrid/cli/cmd-verify.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ export async function runVerifyForCli(
222222
issues.push(`SQLite: ${msg}`);
223223
if (isBindingsError(msg)) {
224224
_sqliteBindingsFailed = true;
225-
fixes.push("node:sqlite is not available. Upgrade Node.js to >=22.12.0 or use a compatible version.");
225+
fixes.push("node:sqlite is not available. Upgrade Node.js to >=22.16.0 or use a compatible version.");
226226
} else {
227227
fixes.push(
228228
`SQLite: Ensure path is writable and not corrupted. Path: ${resolvedSqlitePath}. If corrupted, back up and remove the file to recreate, or run from a process with write access.`,

extensions/memory-hybrid/cli/commands/manage/register-validate-cron-exit.ts

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,31 +22,28 @@ export function registerValidateCronExit(hybrid: Chainable): void {
2222
.requiredOption("--required-steps <steps...>", "Required step names (space-separated)")
2323
.option("--allow-skip", "Allow skip variants (e.g., distill-skipped) to count as success")
2424
.option("--json", "Output JSON result")
25-
.action(async (opts: {
26-
exitPath: string;
27-
logPath?: string;
28-
requiredSteps: string[];
29-
allowSkip?: boolean;
30-
json?: boolean;
31-
}) => {
32-
const result = validateMaintenanceExecution(
33-
opts.exitPath,
34-
opts.logPath,
35-
opts.requiredSteps,
36-
!!opts.allowSkip,
37-
);
25+
.action(
26+
async (opts: {
27+
exitPath: string;
28+
logPath?: string;
29+
requiredSteps: string[];
30+
allowSkip?: boolean;
31+
json?: boolean;
32+
}) => {
33+
const result = validateMaintenanceExecution(opts.exitPath, opts.logPath, opts.requiredSteps, !!opts.allowSkip);
3834

39-
if (opts.json) {
40-
console.log(generateCronStatusReport(result));
41-
} else {
42-
printValidationResult(result);
43-
}
35+
if (opts.json) {
36+
console.log(generateCronStatusReport(result));
37+
} else {
38+
printValidationResult(result);
39+
}
4440

45-
// Exit with non-zero if maintenance failed
46-
if (result.maintenanceStatus === "failed" || result.maintenanceStatus === "partial") {
47-
process.exitCode = 1;
48-
}
49-
});
41+
// Exit with non-zero if maintenance failed
42+
if (result.maintenanceStatus === "failed" || result.maintenanceStatus === "partial") {
43+
process.exitCode = 1;
44+
}
45+
},
46+
);
5047
}
5148

5249
function printValidationResult(result: ExitValidationResult): void {

extensions/memory-hybrid/package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)