openvibers/openvibe.network Commits

Grant Games the Bench capabilities for AI match outcomes (BENCH-7) (#417)

OP OpenVibers committed 15 days ago · 271ec4f860 · 4 files, +9 −2

* Grant Games Bench match capabilities

* perf budget: HTML brotli 33 -> 34 KB (33.1 measured with Games' Bench capabilities listed)

Changes

ddiff --git a/server/identity/principals.js b/server/identity/principals.js
iindex 66a1a65a..f2fdff5a 100644
---- a/server/identity/principals.js
++++ b/server/identity/principals.js
@@@ -616,6 +616,9 @@ const DEFAULT_GRANTS = [
['design', 'bench.judgement.cast', 'openvibe.bench', []],
['design', 'bench.board.read', 'openvibe.bench', []],
['design', 'bench.entry.create', 'openvibe.bench', []],
++ // Games submits each AI duel as a Bench task, two priced seat entries, and one automatic outcome.
++ ...['bench.task.create', 'bench.round.create', 'bench.entry.create', 'bench.judgement.cast']
++ .map((cap) => ['games', cap, 'openvibe.bench', []]),
];
// Grants withdrawn by decision; applied at every boot so an old default can't come back.
ddiff --git a/test/perf-budget.test.js b/test/perf-budget.test.js
iindex 8344daf2..c374a590 100644
---- a/test/perf-budget.test.js
++++ b/test/perf-budget.test.js
@@@ -13,7 +13,7 @@ const { measure, check, format } = require('openvibe-shared/perf-budget');
const BUDGETS = {
htmlRawKB: 188, // 188 with the agent layer's rel=alternate/describedby link tags on every public page (SEO-1/SEO-2, 2026-10-29: +0.2 KB); 187 with Bench open (contracts 0.238.0, 2026-10-28); 186 with Cam open (contracts 0.237.0, 2026-10-28); 184.4 with Fun open (contracts 0.236.0, 2026-10-28); 182.7 with Vision and Exchange open (contracts 0.235.0, 2026-10-28); 179 with Meme open (contracts 0.234.0, 2026-10-28); 174.1 with Domains, Report and Design open (contracts 0.226-0.228, 2026-10-28); 168.1 the hero's orbit and rich cards for live streams, recordings and screenshots (2026-10-28: the owner asked for animated visuals and YouTube-style cards); 152.4 openvibe-shared 4.15 footer: the compact footer opens into the whole one, and the pulse line; 147.9 with the home's FAQ (six questions and their FAQPage JSON-LD), the numbers panel and the service map's group headings (2026-10-22); 141.2 with Tips and VIP open (contracts 0.200.0, 37 sites; the Opening next section is gone); 134 with Play (contracts 0.172.1); 128.3 with Events, AI and Search added (31 sites, contracts 0.135.0); 122.3 (shared 2.21.0: a real glyph for every product card, where ten drew the 'V'); was 110.6 with 33 live sites (contracts 0.119.0). The home page lists every site, so it grows with the network
-- htmlBrotliKB: 33, // 32.0 with Fun, Vision and Exchange open (contracts 0.236.0, 2026-10-28); 31.2 with Domains, Report and Design open (2026-10-28); 30.1 with the Organization saying who OpenVibe is (description, other names, what it is not, 15 sites; 2026-10-28); 28.5 with the FAQ, numbers and groups (2026-10-22); 26.1 with Play; 25.1 (31 sites, contracts 0.135.0); 24.1 (shared 2.21.0, the same glyphs); 20.5 (contracts 0.116.0)
++ htmlBrotliKB: 34, // 33.1 with Games granted its Bench match capabilities (BENCH-7, 2026-10-29: the home lists what each service may do); 32.0 with Fun, Vision and Exchange open (contracts 0.236.0, 2026-10-28); 31.2 with Domains, Report and Design open (2026-10-28); 30.1 with the Organization saying who OpenVibe is (description, other names, what it is not, 15 sites; 2026-10-28); 28.5 with the FAQ, numbers and groups (2026-10-22); 26.1 with Play; 25.1 (31 sites, contracts 0.135.0); 24.1 (shared 2.21.0, the same glyphs); 20.5 (contracts 0.116.0)
jsFiles: 8, // 7 with boost.js, was 6 (2026-10-13, plan T11 step 3: one more script on every boosted page; it loads route-transition.js on the first move only)
jsRawKB: 311, // 306.4 openvibe-shared 4.25.0: the menu's orb beside the brand, both balances on phones, messages, the account sheet on phones and the bar stepping away on phones; 298.9 openvibe-shared 4.22.0: the navbar's magnifier search button and More dropdown (search.js and loading.js load only when used); 293.1 Shared 4.17.0: OpenCoins and Vibes chips (wallet: true) in the navbar; 279.1 openvibe-shared 4.15 footer: the compact footer opens into the whole one, and the pulse line; 269.3 with shared 4.11.0's seasonal navbar (Pumpkin Night and the season badge, +2.6); 249.8 with boost.js (13.1); 228.3
jsBrotliKB: 78, // 77 openvibe-shared 4.25.0: the menu's orb beside the brand, both balances on phones, messages, the account sheet on phones and the bar stepping away on phones; 73.3 Shared 4.17.0: OpenCoins and Vibes chips (wallet: true) in the navbar; 70.7 openvibe-shared 4.15 footer: the compact footer opens into the whole one, and the pulse line; 68.0 with shared 4.12.0 (light/dark switch, seasonal mark, theme pairs); 64.5 with shared 4.11.0's navbar; 60.3 with boost.js (3.8); 53.9
ddiff --git a/test/principals.test.js b/test/principals.test.js
iindex 285ef4c2..4e03427c 100644
---- a/test/principals.test.js
++++ b/test/principals.test.js
@@@ -166,6 +166,10 @@ const server = http.createServer(app);
t = await token({ client_id: 'design', client_secret: 'design-secret', audience: 'openvibe.bench' });
assert.strictEqual(t.status, 200, JSON.stringify(t.body));
assert.deepStrictEqual(t.body.scope.split(' '), ['bench.board.read', 'bench.entry.create', 'bench.judgement.cast', 'bench.round.create', 'bench.round.read', 'bench.task.create'], "Design creates and reads Bench tasks and rounds, reads boards and casts judgements");
++ await db.prepare("UPDATE oauth_clients SET client_secret = 'games-secret' WHERE client_id = 'games'").run();
++ t = await token({ client_id: 'games', client_secret: 'games-secret', audience: 'openvibe.bench' });
++ assert.strictEqual(t.status, 200, JSON.stringify(t.body));
++ assert.deepStrictEqual(t.body.scope.split(' '), ['bench.entry.create', 'bench.judgement.cast', 'bench.round.create', 'bench.task.create'], 'Games submits priced matches and automatic outcomes');
// OpenVibe.Bench (contracts 0.238.0): the account export/deletion pair, its account-event subscriptions, and
// ai.run.create (namespace ai.generate) to run its pinned rounds; it publishes bench.* events and indexes nothing.
ddiff --git a/test/registry-ecosystem.test.js b/test/registry-ecosystem.test.js
iindex 5816b63b..bc3fe22d 100644
---- a/test/registry-ecosystem.test.js
++++ b/test/registry-ecosystem.test.js
@@@ -18,7 +18,7 @@ assert.strictEqual(require('../server/registry/ecosystem').INTERNAL.space, 'http
});
await new Promise(r => up.listen(0, '127.0.0.1', r));
const upUrl = `http://127.0.0.1:${up.address().port}`;
-- const eco = createEcosystemRegistry({ issuer: 'https://openvibe.network', internalOverrides: { network: upUrl, live: 'http://127.0.0.1:1', media: upUrl } });
++ const eco = createEcosystemRegistry({ issuer: 'https://openvibe.network', internalOverrides: { network: upUrl, live: 'http://127.0.0.1:1', media: upUrl, 'media-hub': 'http://127.0.0.1:1' } });
await eco.pollAll();
const app = express();
app.use(eco.router());