Commits
-
openvibe-sdk v0.38.0 (was v0.37.2) (#34)OpenVibers · 10 Oct 2026
ea410bb -
openvibe-shared v3.0.0 (was v2.21.2) (#33)OpenVibers · 10 Oct 2026
e5bf3bc -
openvibe-shared v2.21.2 (was v2.21.1) (#32)OpenVibers · 10 Oct 2026
5fc2a9d -
openvibe-sdk v0.37.2 (was v0.35.0) (#31)OpenVibers · 10 Oct 2026
29a7f82 -
openvibe-shared v2.21.1 (was v2.21.0) (#30)OpenVibers · 10 Oct 2026
063e37d -
openvibe-shared v2.21.0 (was v2.20.4) (#29)OpenVibers · 10 Oct 2026
cd4865a -
openvibe-shared v2.20.4 (was v2.20.3) (#28)OpenVibers · 10 Oct 2026
1e2a00f -
openvibe-contracts v0.127.0 (was v0.126.0) (#27)OpenVibers · 10 Oct 2026
346b508 -
openvibe-shared v2.20.3 (was v2.20.0) (#25)OpenVibers · 10 Oct 2026
0d54cc3 -
openvibe-contracts v0.126.0 (was v0.122.1) (#24)OpenVibers · 10 Oct 2026
c02e6c2 -
openvibe-shared v2.20.0 (was v2.17.0) (#23)OpenVibers · 9 Oct 2026
621486b -
openvibe-contracts v0.122.1 (was v0.112.0) (#22)OpenVibers · 9 Oct 2026
ba442b0 -
openvibe-shared v2.17.0 (was v2.15.0) (#21)OpenVibers · 9 Oct 2026
b3fa925 -
openvibe-shared v2.15.0 (was v2.13.2) (#20)OpenVibers · 8 Oct 2026
68e9ab9 -
openvibe-shared v2.13.2 (was v2.13.0) (#18)OpenVibers · 8 Oct 2026
03d692d -
openvibe-sdk v0.35.0 (was v0.23.1) (#17)OpenVibers · 7 Oct 2026
8940c4a -
openvibe-contracts v0.112.0 (was v0.78.0) (#16)OpenVibers · 7 Oct 2026
d051805 -
openvibe-shared 2.13.0: release notifications connect to openvibe.events (plan T7) (#15)OpenVibers · 7 Oct 2026
785e878 -
Games: vitest 4 (no tinypool), clearing the two critical tinypool advisories. (#14)OpenVibers · 7 Oct 2026
ac5a200 -
Adopt openvibe-shared v2.6.0 and serve llms-full.txt plus IndexNow keyOpenVibers · 4 Oct 2026
e277d63 -
Run games-quickjs@1 pack mods in budgeted per-mod QuickJS sandboxesOpenVibers · 4 Oct 2026
5c34a9e -
Rapier replaces Havok behind the unchanged physics seam (ADR-0007 M1 steps 4-7), and Games serves its own legal pages (plan T11 decision 6).OpenVibers · 29 Sept 2026
9201a6f -
Staff auth on openvibe-sdk v0.23.1's JWKS client (the last good keys through a Network outage, a rotation honoured on an unknown kid) and openvibe-contracts v0.78.0. Service and app principals are now checked by openvibe-contracts' verifyServiceToken with the key their kid names (else each key): the claim schema, issuer, audience and the sandbox refusal apply, which verifyUserToken(allowServiceTokens) had skipped. A refusal is a null with the reason logged; nothing the SDK says (it names the internal JWKS URL) reaches a caller. Tests: a sandbox token with games.mod.manage is refused, a svc: token with it passes, an unknown signing key is refused, cached keys verify through a JWKS outage. typecheck, lint, test, slice and bundle checks green.OpenVibers · 29 Sept 2026
5d18446 -
Physics conformance suite and an in-memory mock world (ADR-0007 M1 step 1): packages/physics/src/conformance.test.ts runs every seam case against MockPhysicsWorld and the Havok adapter (bodies, sweeps, joints, sleep and settle thresholds read through the adapter under test, gravity measured, per-engine landing heights pinned separately), with a guard that fails on a skip entry naming no case. The mock (@openvibe/physics/mock) now backs the gameplay movement tests in place of their ad-hoc stub, which exposed two mock bugs: a swept capsule's height is its total height including caps (it was 0.8 m too tall), and a capsule sweep meets a plane from either side (walls and ceilings were passed through), with the start-overlap guard both engines have. The two unrun smoke scripts are gone (the suite covers them). sliceTest waits for the recalled snapshot and meta.secured inside one budget (a race). Reviewed independently twice; pnpm typecheck, lint and test green (1036 passed, 9 skipped).OpenVibers · 29 Sept 2026
c24b7b1 -
M1 identity: the WebSocket authenticates at the upgrade, the editor key is gone, and the contracts pin is current (ADR-0007 decisions 8 and 12).OpenVibers · 29 Sept 2026
3ea36b3 -
M1 persistence: Games runs on PostgreSQL 18 + Valkey through openvibe-sdk (ADR-0007 decision 5). SQLite is gone (no data is restored; a new schema from scratch, no schema-version history). - packages/persistence: openPgStore on an openvibe-sdk/db handle, every repository async, batch upserts as multi-row INSERT ... ON CONFLICT in chunks of 500; migrations/0001_initial.sql: places, world_meta, world_entities and world_constraints keyed by place, characters (account_key is the subject, or guest: + sha256 of a guest token: a raw guest token is never stored), mods, grants, placements, audit, media mirrors, account data events, identity adoptions, and the SDK's event_outbox and token_revocations. transaction() hands the tx to its callback; the outbox enqueue takes it and refuses to run outside one. - The write-behind flusher (apps/server/src/game/flusher.ts): the tick builds a copy-on-write snapshot and never awaits I/O; one transaction at a time writes meta, NPCs (now dirty-tracked), entities, constraints, characters and their outbox events; a checkpoint while one is in flight is coalesced (flags stay set); a failed one restores its dirtiness. The shutdown checkpoint is never coalesced (queued behind one in flight), drain has a real deadline, a failed disconnect save retries in place with backoff, and a returning player's sign-in waits for queued saves before reading the character. - No database access on the tick: markets and env preload at boot, mod placements come from an in-memory mirror written through a serialized queue (rolled back if the write fails), an offline owner's friends load asynchronously (denied until loaded), hello resolves asynchronously with an in-flight guard. - Platform adapters on the SDK handle (createPgOutbox, createPgRevocationStore, account data), readiness via db.ready(), per-actor limits on Valkey when VALKEY_URL is set; development without DATABASE_URL runs on PGlite; migrations run as the owner on DATABASE_DIRECT_URL. Unhandled rejections closed in /api/v1/platform, readiness, the media mirror pass and account events; the Network revision advances only after its writes; a failed budget disable keeps enforcing. - openvibe-sdk v0.22.0, openvibe-shared v1.30.1; better-sqlite3 removed. Built by DeepSeek from Claude's spec; reviewed independently twice (FIX, FIX) and by Claude (the shutdown coalescing loss, drain deadline, disconnect retries and sign-in ordering fixed by Claude); every finding fixed with tests. pnpm typecheck, lint, test 872/872, slice test OK on PGlite, server bundle builds. Not deployed yet: production needs its database (roles/data/add-service.sh games) and Host's Games strategy moved off better-sqlite3 first.OpenVibers · 29 Sept 2026
540f672 -
Per-actor limits on Games' HTTP writes (roadmap WS-R task 4; openvibe-sdk 0.11.0 -> 0.12.0 openvibe-sdk/limits). apps/server/src/net/actorLimits.ts counts the capability boundaries after the caller is authorised and before the body is read: editor map saves (30 a minute, 600 an hour) and asset uploads (60, 1200), by a hash of the editor credential, never the credential; and the mods API's writes (30, 300) by the staff or service actor. Past a limit: 429 problem+json rate_limited with Retry-After, logged. Gameplay is the WebSocket with its own per-socket flood control; reads and signed-out pages keep what they had. GAMES_LIMITS_MINUTE / _HOUR set the defaults (120 / 3000). apps/server/src/net/actorLimits.test.ts: one actor refused before the handler, another passes, the window reopens, the credential is hashed. Prettier on routes.ts and main.ts. pnpm test 882/882, typecheck clean.OpenVibers · 28 Sept 2026
51d8688 -
Games takes part in account export and deletion (roadmap WS-B task 7, ADR-033; apps/server openvibe-contracts 0.53.0 -> 0.71.0). POST /internal/events takes network.account.export_requested and network.account.deleted (the boot subscriptions now include both) and hands them to apps/server/src/platform/accountData.ts, answered once applied (500 when it failed, so Events retries). Each is applied once per export or deletion (account_data_events, kept by the adapter beside the outbox).OpenVibers · 27 Sept 2026
fcb62c5 -
The game pages run their own pinned OpenVibe Frame (roadmap WS-P task 4, D42: the Games client). The server gains openvibe-shared 1.23.0 and serves its browser files at /shared (apps/server/src/net/sharedAssets.ts: only the files openvibe-shared/files lists, content-addressed with ?v= for a year, else five minutes, ETag and 304, the same rules as openvibe-shared/serve, which is Express-shaped while this server is plain node:http), next to /release.json. index.html, play.html and editor.html load theme-loader, navbar and footer from /shared/ instead of https://openvibe.network/shared/, so they run what Games pins and keep their frame while Network is down (Vite leaves the classic script tags as they are). Test: the pinned navbar with its hash and ETag, only listed files, and no page loading the frame from openvibe.network. pnpm test: 79 files, 866 tests.OpenVibers · 27 Sept 2026
8200c2c -
Moderation audit (ADR-022, WS-D task 1): games.moderation.action from the outbox in the same transaction when staff revoke (mod.revoked, with the reason and the grants it ended), disable (mod.disabled) or put back a disabled (mod.enabled) mod someone else published, the publisher as owner_subject; installs, first enables, grant changes and the publisher acting on their own mod report nothing. Declared in the service manifest proposal. Pins: openvibe-contracts 0.49.0 → 0.53.0OpenVibers · 26 Sept 2026
28c621d