openvibers/openvibe.games Commits

New worlds: validate against Contracts 0.320.0, no invented cover (#306)

OP OpenVibers committed 6 days ago · 83cc55bf5a · 5 files, +16 −9

A creator world still has no cover of its own, so the card keeps omitting an image rather than inventing a placeholder. The test now validates the published file against frame.menu-cards@1 0.320.0 (which allows an optional item image) and asserts no image is sent.

Changes

ddiff --git a/README.md b/README.md
iindex c873df6..a8a2a77 100644
---- a/README.md
++++ b/README.md
@@@ -291,7 +291,7 @@ Events deliveries) and `OV_NETWORK_AUTH_URL` live in `/etc/openvibe/games.env`,
between services.
<!-- versions:start -->
--- openvibe-contracts: v0.312.0
++- openvibe-contracts: v0.320.0
- openvibe-sdk: v0.94.0
- openvibe-shared: v4.129.0
- openvibe-publishing: v1.4.0
ddiff --git a/STATUS.json b/STATUS.json
iindex 0fc6a77..8b36cce 100644
---- a/STATUS.json
++++ b/STATUS.json
@@@ -6,7 +6,7 @@
"runtime": "node 22, TypeScript (tsx), pnpm workspace; Babylon.js (client) + deterministic Rapier physics; PostgreSQL 18 via openvibe-sdk/db (pg, or embedded PGlite in development); Valkey optional",
"port": 8000,
"domain": "openvibe.games, play.openvibe.games",
-- "contracts": "openvibe-contracts v0.312.0, openvibe-sdk v0.94.0, openvibe-shared v4.129.0, openvibe-publishing v1.4.0 (apps/server/package.json)",
++ "contracts": "openvibe-contracts v0.320.0, openvibe-sdk v0.94.0, openvibe-shared v4.129.0, openvibe-publishing v1.4.0 (apps/server/package.json)",
"capabilities": [
"games.mod.manage",
"games.mod.read",
ddiff --git a/apps/server/package.json b/apps/server/package.json
iindex 865e920..1a88886 100644
---- a/apps/server/package.json
++++ b/apps/server/package.json
@@@ -21,7 +21,7 @@
"@openvibe/shared": "workspace:*",
"ajv": "^8.17.1",
"iovalkey": "^0.4.0",
-- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.312.0",
++ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.320.0",
"openvibe-publishing": "https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v1.4.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.94.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.129.0",
ddiff --git a/apps/server/src/net/menuCard.test.ts b/apps/server/src/net/menuCard.test.ts
iindex ff99076..b536d35 100644
---- a/apps/server/src/net/menuCard.test.ts
++++ b/apps/server/src/net/menuCard.test.ts
@@@ -1,8 +1,11 @@
import type { IncomingMessage, ServerResponse } from 'node:http'
++import { createRequire } from 'node:module'
import { describe, expect, it } from 'vitest'
import type { CreatorWorld } from '@openvibe/persistence'
import { CARD_TTL_S, cardFrom, createMenuCardHandler, plain } from './menuCard.js'
++const contracts = createRequire(import.meta.url)('openvibe-contracts') as { validate: (id: string, value: unknown) => { valid: boolean; errors?: unknown } }
++
const NOW = Date.parse('2026-11-07T08:00:00Z')
const world = (id: string, over: Partial<CreatorWorld> = {}): CreatorWorld => ({
@@@ -84,6 +87,10 @@ describe('the menu network card (frame.menu-card@1)', () => {
expect(item.meta.length).toBeLessThanOrEqual(120)
expect(item.url.startsWith('https://openvibe.games/')).toBe(true)
}
++ // The menu's contract now allows an item image, but a creator world has no cover of its own: no picture is
++ // invented here (a placeholder is never sent), and the file still validates against the new schema.
++ expect(card.items.every((item) => !('image' in item))).toBe(true)
++ expect(contracts.validate('frame.menu-cards@1', [card]).valid).toBe(true)
})
it('sends at most six, and never a draft or a hidden world', () => {
ddiff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
iindex aa66e6c..a22f6ff 100644
---- a/pnpm-lock.yaml
++++ b/pnpm-lock.yaml
@@@ -124,8 +124,8 @@ importers:
specifier: ^0.4.0
version: 0.4.0
openvibe-contracts:
-- specifier: https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.312.0
-- version: https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.312.0
++ specifier: https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.320.0
++ version: https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.320.0
openvibe-publishing:
specifier: https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v1.4.0
version: https://codeload.github.com/OpenVibers/OpenVibe.Publishing/tar.gz/refs/tags/v1.4.0(openvibe-sdk@https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.94.0(@electric-sql/[email protected])([email protected])([email protected]))(openvibe-shared@https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.129.0)
@@@ -1415,9 +1415,9 @@ packages:
resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==}
engines: {node: '>=12.20.0'}
-- openvibe-contracts@https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.312.0:
-- resolution: {tarball: https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.312.0}
-- version: 0.312.0
++ openvibe-contracts@https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.320.0:
++ resolution: {tarball: https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.320.0}
++ version: 0.320.0
engines: {node: '>=20'}
hasBin: true
@@@ -2930,7 +2930,7 @@ snapshots:
-- openvibe-contracts@https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.312.0:
++ openvibe-contracts@https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.320.0:
dependencies:
ajv: 8.20.0
ajv-formats: 3.0.1([email protected])