Skip to content
-
sweepOrphans drops only the exact generated run shape, quoted (#9)OpenVibers · 4 Oct 2026
4212e31
-
Preserve active test databases and remove orphaned test volumes (#7)OpenVibers · 4 Oct 2026
48c3513
-
Fix new SDK subpath tests and document Fabric exports (#8)OpenVibers · 4 Oct 2026
9b63449
-
T1 lane A step 4 — OpenVibe.SDK: add the Fabric modules… (#4)OpenVibers · 3 Oct 2026
9300976
-
Add user-owned trust class and bump openvibe-contracts to 0.86.0 (#3)OpenVibers · 3 Oct 2026
10417ad
-
Emit full platform.usage-sample record from govern onUsage with service (#2)OpenVibers · 2 Oct 2026
930cafe
-
Give the test PostgreSQL container a 1 GB /dev/shm (#1)OpenVibers · 2 Oct 2026
3b0b5dc
-
SDK 0.26.0 (plan T1 kits): openvibe-sdk/service is the service kit. gracefulStop() and within() are OpenVibe.Network's and OpenVibe.Community's server/graceful.js (stop steps, server.close with Connection: close on requests in flight, idle connections swept and event streams destroyed, close steps, one stop per process) plus the exit code of a blown deadline, beforeDrain and handles; the deadline timer stays referenced so a stuck step exits with the deadline's code. The error layer: createServiceError, ServiceError, asServiceError, run, wrap, sendError, jsonBody (400 request.invalid_json, 413 request.too_large), privateNoStore and the opt-in jsonErrors. The readiness, metrics, release and problem helpers are re-exported from openvibe-shared and openvibe-contracts, required on first use (the SDK gains no dependency). scripts/esm.js turns a lazy CommonJS getter into an ESM function. Types, ESM entry, docs/service.md, README and CHANGELOG. Tests: service (9 cases, a drain timeout with no requests cuts nothing), pack and browser entries.OpenVibers · 1 Oct 2026
314bb57
-
SDK 0.25.2: openvibe-sdk/realtime follows Events' opaque cursors (ADR-042): it resumes from the last SSE id exactly as Events sent it and dedupes on the seq in the message data (0.25.1 parsed a cursor id as a number, so resume and the repeat filter stopped advancing); subscription.lastEventId is the raw id. A cursor-id resume test.OpenVibers · 29 Sept 2026
ef7e633
-
SDK 0.25.1: verifyServiceToken({ jwks }) also takes a JWKS client the service already holds (the one it built for openvibe-sdk/sso, or a test's), so service tokens are checked with the key their kid names instead of a service taking the first key itself. Test: kid choice, bad signature and an unreachable client (token.unavailable, fixed reason) through a held client.OpenVibers · 29 Sept 2026
2c28409
-
SDK 0.25.0 (plan T1 kits): openvibe-sdk/sso createSsoClient() is a product site's sign-in with OpenVibe.Network in one call (router with /login state + PKCE S256, /callback server-side exchange, /fedcm, /logout, /me, /refresh; optionalAuth/requireAuth; offline verification through the shared JWKS client; next limited to this site and the Network), replacing the copies in Blog, Coupons, Deals, Host, News and Trade. openvibe-sdk/events createServiceOutbox() is a service's outbox in one call around createPgOutbox (emit joins the change's transaction, emitIn, moderationAction, start/stop/kick/status; the relay is off and says so without the events URL or client secret), replacing the wrapper nine services copied. Types, ESM entries, README and CHANGELOG. 47/47 test files with the test services.OpenVibers · 29 Sept 2026
9b5bbec
-
No floating promises left in the SDK (plan T0, the shared checker reports 0): the Valkey queue's fire-and-forget runs log a rejection (a malformed stream entry used to be an unhandled rejection; test/valkey.test.js drives it), the mock jobs service fails a job whose background run throws, and the synchronous calls the checker cannot tell apart (better-sqlite3 exec, the SQLite markFailure, Web Streams enqueue) are marked '// floating-ok: <why>'. 45/45 test files (verified).OpenVibers · 29 Sept 2026
4594e18
-
SDK 0.24.0: openvibe-sdk/auth verifyServiceToken(token, { jwks | publicKey, issuer, audience, contracts }) for services that receive service or app tokens. The SDK picks the key (the kid's, else each; the shared JWKS client or a pinned PEM) and every rule is the service's own pinned openvibe-contracts verifyServiceToken, passed in as contracts, so the SDK carries no copy of the rules to drift. No key is token.unavailable with a fixed reason; the fetch error goes to log. verifyUserToken refuses a typed token (typ or purpose: a realtime ticket, a FedCM assertion) as token.not_user. Types, ESM entry, bundle and docs. npm test 45/45 with the test services.OpenVibers · 29 Sept 2026
dbf74dd
-
v0.23.1: the release version is whole (SDK_VERSION, lockfile and browser bundle said 0.22.0 in 0.23.0); a malformed JWKS entry is skipped instead of failing the whole key set; a kid-less legacy JWKS never refetches for a kid; log declared on the verify options. Found by an independent DeepSeek review of v0.23.0. npm test 44/44 on Node 22 with the test services, run after the version bump.OpenVibers · 29 Sept 2026
b673d43
-
v0.23.0: a JWKS client behind token verification: the last good keys through outages, backoff, rotation honoured at once, unknown-kid floods throttled, status for readiness (plan T0/T1). npm test 44/44 on Node 22 with the test services.OpenVibers · 29 Sept 2026
063799e
-
v0.22.0: openvibe-sdk/placement (the adaptive fabric's planner: constraints before cost, marginal cost after free allowances with forecast and reserve, owned-capacity spill-over, hysteresis, rendezvous hashing, power of two choices, Ed25519-signed route plans with a last-good holder) and openvibe-sdk/govern (weighted cost units, tiered windowed quotas, reserve/commit/release settled by any process, idempotent charges, concurrency leases, on Valkey or in memory).OpenVibers · 28 Sept 2026
36fb8c0
-
v0.21.3: createTestDb returns url and directUrl for a spawned service process; sqlfix's envelope rewrite is idempotent.OpenVibers · 28 Sept 2026
59b99c5
-
sqlite-schema-to-pg: quote every column name PostgreSQL reserves and SQLite does not (Billing's settings.freeze), in definitions, index lists and seed INSERTs.OpenVibers · 28 Sept 2026
955e1d1
-
v0.21.2: an outbox flush() during a relay pass gets the next pass; test containers keep PostgreSQL within its connections.OpenVibers · 28 Sept 2026
8ca57de
-
asyncify.js: a bare call of a function that was already async before the run stays fire-and-forget.OpenVibers · 28 Sept 2026
d4d2ba4
-
v0.21.1: the PostgreSQL outbox publishes in write order; migration tools and lessons from the Media pass.OpenVibers · 28 Sept 2026
faa3550
-
Migration tools and lessons from the Community pass (G3).OpenVibers · 28 Sept 2026
fc2a299
-
v0.21.0: createPgRevocationStore (token cutoffs on PostgreSQL), Valkey without the INFO ready check, and migration tools for SQLite text timestamps.OpenVibers · 28 Sept 2026
b86b523
-
Migration tools and lessons from the Events pass (G3).OpenVibers · 28 Sept 2026
999e889
-
v0.20.4: bytea comes back as a Buffer from both adapters (PGlite returned a Uint8Array, so Buffer.isBuffer and toString('hex') differed between tests and production; found with openvibe-shared's config store on PostgreSQL). npm test 41/41 with the containers.OpenVibers · 28 Sept 2026
e0ccc14
-
v0.20.3: importSqlite reads the connection's current schema instead of public only, so rehearsals can import into a createTestDb schema on the containers (production is unchanged, its search path is public). Documents that an embedded PGlite can break on very large rows (OpenVibe.AI's runs; the same import verifies on PostgreSQL). tools/asyncify: functions imported by destructuring from a converted file are async when they are there (AI's seed was left unawaited). npm test 41/41 with the containers.OpenVibers · 28 Sept 2026
06ca366
-
v0.20.2: importSqlite refuses a source table with no target table instead of skipping it silently (a table a module created at runtime and the migration forgot would have been dropped by a switch; found converting AI). SQLite's own tables and FTS5 virtual tables with their shadows are still skipped; anything else not imported on purpose goes in the new skipSource option (runSqliteMigration too). An audit of the eleven switched services found nothing lost. tools/asyncify: the codemod follows aliases of async module methods, reports computed calls on module APIs, orders nested insertions explicitly (no more garbled Promise.all wraps); the schema converter handles WHEN on immutability triggers, quoted reserved column names (window, user) and NOCASE on expressions; sqlfix quotes reserved names in SQL strings, rewrites JSON.parse of jsonb envelopes and assert.throws over statements, and lists the order sqlfix → asyncify. npm test 41/41 with the containers.OpenVibers · 28 Sept 2026
9a251b4
-
v0.20.1: openvibe-sdk/db runs one query at a time per transaction connection, so Promise.all over db calls inside a transaction no longer queues queries on a busy node-postgres client (deprecated; pg@9 refuses it); outside a transaction calls still run concurrently on the pool. Also fixes 0.20.0's release: core.SDK_VERSION said 0.19.0 and the browser bundle was stale (CI was red). tools/asyncify: the codemod awaits a helper's calls of an async function it was passed (waitFor(fn), conflictGuard(fn), route wrappers) and leaves a promise started early and awaited later alone; gen-migration --ensure captures modules' ensureSchema() SQL and --no-outbox/--no-inbox; the schema converter turns a bare INTEGER PRIMARY KEY into an identity by default and drops WITHOUT ROWID; sqlfix rewrites db.transaction(fn)() and db.inTransaction. npm test 41/41 with the containers.OpenVibers · 28 Sept 2026
e155d19
-
tools/asyncify after Deals, Coupons, Trade and Reviews: gen-migration.js (the first migration from server/db.js at HEAD, evaluated when the SCHEMA has interpolations, plus the Publishing and SDK tables under any names), g1db.py (server/db.js to openDb/createStore/openStore), g1docs.py (README and STATUS.json), sqlfix.py (the SQL rewrites that are safe by text: INSERT OR IGNORE, NOCASE, ILIKE, json_each, IFNULL, sqlite_master, qualified upsert targets, sequencer.stamp's handle; and CHECK lines for the rest). asyncify.js wraps .map() callbacks that become async in Promise.all, recursively outwards, and reports unawaited .map(async …). sqlite-schema-to-pg converts immutable-row triggers (UPDATE OF too) to PL/pgSQL and NOCASE indexes to lower(). docs/migrating-to-postgresql.md §7 gains the four services' lessons. Not part of the published package.OpenVibers · 28 Sept 2026
580f50f
-
v0.20.0: db.afterCommit(fn) runs fn once the running transaction commits, never after a rollback; a savepoint that rolls back drops the hooks added inside it. Hooks run in order, outside the transaction, with the connection back in the pool; one that throws is logged and the rest still run. Outside a transaction fn runs on the next turn. It replaces the setImmediate-after-a-synchronous-transaction pattern of better-sqlite3 services (News' comment-thread visibility first). db.stats().open counts transactions in progress. tools/asyncify gains sqlite-schema-to-pg.js and g1pass.py, and asyncify.js treats { name: asyncFn } as an async method. docs/migrating-to-postgresql.md §7 has News' lessons (rowid tiebreaks, GREATEST, qualified ON CONFLICT targets, afterCommit, the PG inbox). npm test 41/41; db-ambient also through PgBouncer.OpenVibers · 28 Sept 2026
9a653ce
More commits