{"id":"pst_01M3JTK9YVAVTT9V1Y602JY7YF","url":"https://openvibe.blog/@openvibe/patch-notes-lives-feature-loader-runs-on-the-networks-web-runtime","blog":{"id":"blg_01M362MF0EDJ7QHQTRD8A3Q981","handle":"openvibe","title":"The OpenVibe blog","url":"https://openvibe.blog/"},"title":"Patch notes: Live's feature loader runs on the network's web runtime","summary":"What shipped on OpenVibe from 2026-09-27 to 2026-09-28: 80 changes to OpenVibe.Live, OpenVibe.AI, OpenVibe.Network, OpenVibe.Games, OpenVibe.Media, OpenVibe.Community and 7 more.","body_markdown":"What shipped on OpenVibe from 2026-09-27 to 2026-09-28: 80 changes to OpenVibe.Live, OpenVibe.AI, OpenVibe.Network, OpenVibe.Games, OpenVibe.Media, OpenVibe.Community and 7 more. Every line below is a commit message from the OpenVibers repositories, linked to the change itself.\n\n## Highlights\n\n- **OpenVibe.Live:** Live's feature loader runs on the network's web runtime (roadmap WS-P task 6; openvibe-shared 1.22.0 -> 1.23.0). public/js/ov-loader.js was extracted into openvibe-shared/web-runtime.js and is now a 50-line wrapper: it reads the #ov-assets… ([`d4c15e1`](https://github.com/OpenVibers/OpenVibe.Live/commit/d4c15e1779bebcff8f39e05f8ff07572ce822a3d))\n- **OpenVibe.Network:** Account export and deletion (roadmap WS-B task 7, ADR-033; openvibe-contracts 0.70.0 -> 0.71.0). server/identity/account-data.js. ([`e2787eb`](https://github.com/OpenVibers/OpenVibe.Network/commit/e2787eb4406d354063db96472f21f0c2a1140a1e))\n- **OpenVibe.Live:** Live calls no model provider itself and keeps no shared provider key (roadmap WS-O task 2, shims C-20 and C-21). Production has run AI_SERVICE=remote since 2026-09-23 and the local provider path has had no calls since; streamers' own keys… ([`04cd59f`](https://github.com/OpenVibers/OpenVibe.Live/commit/04cd59fd5443d2b9fa887c54fe9611a2a533302d))\n\n## OpenVibe.Live\n\n[openvibe.live](https://openvibe.live) · [repository](https://github.com/OpenVibers/OpenVibe.Live)\n\n- N-1 fixtures re-recorded from 2e6f546, the release now in production (npm run n-1:record). ([`8525ff1`](https://github.com/OpenVibers/OpenVibe.Live/commit/8525ff1b55c19d38a946c9bfe01defd402bbdd62))\n- Live's feature loader runs on the network's web runtime (roadmap WS-P task 6; openvibe-shared 1.22.0 -> 1.23.0). public/js/ov-loader.js was extracted into openvibe-shared/web-runtime.js and is now a 50-line wrapper: it reads the #ov-assets… ([`d4c15e1`](https://github.com/OpenVibers/OpenVibe.Live/commit/d4c15e1779bebcff8f39e05f8ff07572ce822a3d))\n- deploy/scripts/deploy.sh hands over to ovhost deploy live (OpenVibe.Host strategy release-layout; roadmap WS-N task 11). The old script is kept, unchanged, as deploy/scripts/deploy-legacy.sh. The wrapper maps --wait-idle, --restart… ([`f0edbc0`](https://github.com/OpenVibers/OpenVibe.Live/commit/f0edbc0384fc9a3cf9c5c6e295863cf3391c7411))\n- N-1 fixtures re-recorded from f0edbc0, the release now in production (npm run n-1:record; the first Live release deployed by ovhost's release-layout strategy). ([`e663abb`](https://github.com/OpenVibers/OpenVibe.Live/commit/e663abb53c2903918c80ec5d2b9f04a79d119bbe))\n- Live follows account merges (roadmap WS-B task 5, ADR-029; openvibe-contracts 0.68.0 -> 0.70.0). network.subject.merged arrives at POST /internal/network-events (the --network subscription now asks for it) and server/auth/subject-merge.js… ([`4b7fa3f`](https://github.com/OpenVibers/OpenVibe.Live/commit/4b7fa3f06d96156926df03bfa82f412a08c50c47))\n- Live declares its release components, so a stylesheet-only release is swapped into open tabs in place (D46 scenario 1; Host docs/release-acceptance.md gate 1e, which was open). server/web/release-components.js has three components. styles… ([`efab014`](https://github.com/OpenVibers/OpenVibe.Live/commit/efab01493b4d5d790e96d141f3fe8aa37766a9bd))\n- N-1 fixtures re-recorded from efab014, the release now in production (npm run n-1:record). ([`29d6808`](https://github.com/OpenVibers/OpenVibe.Live/commit/29d68089d086f7df00a7137a5df6ee20f0e336e4))\n- openvibe-shared 1.23.0 -> 1.23.1: release-watch drops an in-place region fetched for the previous account when openvibe-auth-changed fires and fetches it again with the new session (D46 scenario 9, which Live's in-place account switch… ([`0481e9c`](https://github.com/OpenVibers/OpenVibe.Live/commit/0481e9ce09bfa91b2e8b4128fb04b80738f6b813))\n- N-1 fixtures re-recorded from 0481e9c, the release now in production (npm run n-1:record). ([`cd89ba3`](https://github.com/OpenVibers/OpenVibe.Live/commit/cd89ba34b38aca957e1da200517dd79329bcad43))\n- Live takes part in account export and deletion (roadmap WS-B task 7, ADR-033; openvibe-contracts 0.70.0 -> 0.71.0). network.account.export_requested and network.account.deleted arrive at POST /internal/network-events (the --network… ([`585428d`](https://github.com/OpenVibers/OpenVibe.Live/commit/585428dcfad1f973092427735cf841b816cab13e))\n- Account deletion erases a staged chat table on whichever side writes it now (ADR-033, C-04): Live while chat-tables.authority() is live, and its capture relays the delete to Chat's copy; Chat once Chat writes the table (OpenVibe.Chat… ([`06cf38b`](https://github.com/OpenVibers/OpenVibe.Live/commit/06cf38b12faa92ce5ee8bc335ce5f0110b1c6537))\n- N-1 fixtures re-recorded from 06cf38b, the release now in production (npm run n-1:record). ([`cc50c46`](https://github.com/OpenVibers/OpenVibe.Live/commit/cc50c46f73d1c8c3c8c9cf840fd5ecb518a1e4b7))\n- A streamer's own provider key lives in OpenVibe.AI, not in Live's database (roadmap WS-O task 2; AI fca04c7, 0b9f7aa; Network d37ee87 grants live ai.credential.manage). ([`4d758fa`](https://github.com/OpenVibers/OpenVibe.Live/commit/4d758fac9167fefd2b87419acd681baa6ddf3da8))\n- Live calls no model provider itself and keeps no shared provider key (roadmap WS-O task 2, shims C-20 and C-21). Production has run AI_SERVICE=remote since 2026-09-23 and the local provider path has had no calls since; streamers' own keys… ([`04cd59f`](https://github.com/OpenVibers/OpenVibe.Live/commit/04cd59fd5443d2b9fa887c54fe9611a2a533302d))\n- A streamer's AI-viewer daily budget is a cap in OpenVibe.AI (roadmap WS-O task 2; AI 960f14a ai.quota.attribution.manage, Network 728266b). server/ai/viewer-quota.js: on the site's AI with a budget, PUT… ([`1954db2`](https://github.com/OpenVibers/OpenVibe.Live/commit/1954db28342bea96c9ccdb70f7b9d9aedcc24f7a))\n- N-1 fixtures re-recorded from 1954db2, the release now in production (npm run n-1:record). ([`c887515`](https://github.com/OpenVibers/OpenVibe.Live/commit/c887515fd01f353018166b7c9562487a66fbccc6))\n- The moment picker sends OpenVibe.AI its facts, not a rendered prompt (roadmap WS-O task 2; AI 2574aad live.moments.pick template). _findBestMoment runs live.moments.pick with the title, the paste or clip flavor, the timeline, transcript… ([`ec7e4b8`](https://github.com/OpenVibers/OpenVibe.Live/commit/ec7e4b853b1403559efc5835ebe025714958b3c5))\n- N-1 fixtures re-recorded from ec7e4b8, the release now in production (npm run n-1:record). ([`4b9e036`](https://github.com/OpenVibers/OpenVibe.Live/commit/4b9e03661febf09cb15836bcc10d7b1c78891c93))\n- The Arena judges send OpenVibe.AI what Live heard, not a prompt (roadmap WS-O task 2; AI f1564ac live.arena.judge_beef and judge_mic templates). judgeBeef sends the target's names and transcribed forms, whether and how the name was… ([`9f32f86`](https://github.com/OpenVibers/OpenVibe.Live/commit/9f32f86ddd15dcd77405263147655eb4135ec60b))\n- The home slogans, the daily secret and the Star of OpenVibe send OpenVibe.AI data, not prompts (roadmap WS-O task 2; AI templates live.hero.slogans, live.easter_egg, live.home.star). The slogan job sends the chat vibe, per-user notes… ([`5bec390`](https://github.com/OpenVibers/OpenVibe.Live/commit/5bec390934fecfa2d3740e646c4ef5c19645c34f))\n- Chat analysis, person overviews, session titles and VOD ranking send OpenVibe.AI data, not prompts (roadmap WS-O task 2; AI 6b14064). The global chat picture and every chatter's profile (signed-in, bridged, anonymous) send the prior notes… ([`fb2d768`](https://github.com/OpenVibers/OpenVibe.Live/commit/fb2d76835c885292b372de6f922ff1c342c8eac2))\n\n## OpenVibe.AI\n\n[ai.openvibe.network](https://ai.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.AI)\n\n- media.analyze, local-first media analysis (roadmap WS-O task 5). A new step kind, media_analysis (server/workflows/media-analysis.js), behind the workflow media.analyze (server/workflows/media.js, namespace media; Live may run it through… ([`67fb2a4`](https://github.com/OpenVibers/OpenVibe.AI/commit/67fb2a412509ff863a55ab914cba89cce13a2a0c))\n- media.analyze on real streams (WS-O task 5, after the first production runs). Three fixes, from a 3-minute stretch of a JapaneseOldGuy VOD with speech 94% of the time but no highlights. Silence is -50 dB, real silence: a quiet stream talks… ([`2d9a16f`](https://github.com/OpenVibers/OpenVibe.AI/commit/2d9a16f856125cfc41523f0e9b96f9e443723d1f))\n- media.analyze: a highlight's speech is measured in time (at least half the window inside transcript segments), not in space-separated words, so Japanese speech counts (production: JapaneseOldGuy's VOD had loud and scene-change highlights… ([`e587ce1`](https://github.com/OpenVibers/OpenVibe.AI/commit/e587ce1d492c2be1fb8db5638892a1d61b7c8587))\n- A local model for media.analyze (WS-O task 5): deploy/systemd/openvibe-llm.service runs llama.cpp's llama-server on 127.0.0.1:8090 (OpenAI API, no key), held back for live streams (2 threads, CPUQuota 150%, nice 19, MemoryMax 3G).… ([`566822e`](https://github.com/OpenVibers/OpenVibe.AI/commit/566822e12d46e5ca130e88edbcca1d7bae80df37))\n- media.analyze transcribes long recordings in windows (WS-O task 5). The whisper provider caps a call at its own 10-minute timeout, so a whole hour-long VOD would have come back without a transcript. Speech-to-text now runs in windows… ([`6f61c11`](https://github.com/OpenVibers/OpenVibe.AI/commit/6f61c11280bf622a79683822ff294525217d035a))\n- A person's own provider key lives in OpenVibe.AI (roadmap WS-O task 2; openvibe-contracts 0.49.0 -> 0.73.0). ([`fca04c7`](https://github.com/OpenVibers/OpenVibe.AI/commit/fca04c7e51d81d83cd8cb8989b990eb0e8299944))\n- A credential's models or budget change without the key; a new provider or base URL needs it again (openvibe-contracts 0.73.0 -> 0.74.0, ai.credential-put@1 api_key optional after the first put). A key never follows a new endpoint on its… ([`0b9f7aa`](https://github.com/OpenVibers/OpenVibe.AI/commit/0b9f7aab9755bddfc9bf4c9409200202f434b4da))\n- Per-streamer AI budgets are AI quotas (roadmap WS-O task 2; openvibe-contracts 0.74.0 -> 0.75.0 ai.quota.attribution.manage). server/api/attribution-quotas.js: a service sets (PUT /api/v1/attribution-quotas/:attribution, hour or day, cost… ([`960f14a`](https://github.com/OpenVibers/OpenVibe.AI/commit/960f14a8a38d686de1e2a91cbb2c29029931efd6))\n- media.analyze reads a recording where it lies instead of downloading it (roadmap WS-O tasks 2 and 5: the ranged fetch Live's adoption waited for). ([`a5512c3`](https://github.com/OpenVibers/OpenVibe.AI/commit/a5512c39296a7a48f389815d67e51741a0c2da94))\n- .env.example documents AI_MEDIA_STREAM (media.analyze streams through the loopback reader by default; 0 downloads first). ([`60eca1e`](https://github.com/OpenVibers/OpenVibe.AI/commit/60eca1e207c219b8f080e7344a9b885e8a95f4ce))\n- live.moments.pick is a versioned template, not a prompt Live renders (roadmap WS-O task 2). The prompt from Live's ai-moments-job.js is the template live.moments.pick, with JSON output t, title and desc. The prepare hook formats the… ([`2574aad`](https://github.com/OpenVibers/OpenVibe.AI/commit/2574aade6bc607471bc90d7e22c7e5fd30c9a93e))\n- The Arena judges are versioned templates, not prompts Live renders (roadmap WS-O task 2). live.arena.judge_beef and live.arena.judge_mic carry Live's system prompts and JSON schemas (arena/listener.js) and take what Live heard: the… ([`f1564ac`](https://github.com/OpenVibers/OpenVibe.AI/commit/f1564ac965f81e0e9c928482a5a2a7a242a055e6))\n- The home slogans, the daily secret and the Star of OpenVibe are versioned templates (roadmap WS-O task 2). live.hero.slogans, live.easter_egg and live.home.star move from passthrough to structured workflows (version 2 of each key), with… ([`7c01c65`](https://github.com/OpenVibers/OpenVibe.AI/commit/7c01c6509ac03fb5f3be5191e28cbfc646cf3c79))\n- Chat analysis, person overviews, session titles and VOD ranking are versioned templates (roadmap WS-O task 2). Live's prompts from chat-ai.js, chat-ai-routes.js and ai-moments-job.js become five structured workflows. live.chat.global takes… ([`6b14064`](https://github.com/OpenVibers/OpenVibe.AI/commit/6b140649043e0cf583f0eecd7d00b2ef93ec22ab))\n\n## OpenVibe.Network\n\n[openvibe.network](https://openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Network)\n\n- deploy/scripts/deploy.sh hands over to ovhost deploy network --install-units (OpenVibe.Host strategy git-checkout; roadmap WS-N task 11). The old script is kept, unchanged, as deploy/scripts/deploy-legacy.sh. ovhost does what it did… ([`d69ec60`](https://github.com/OpenVibers/OpenVibe.Network/commit/d69ec602b3d650f49c656fdf78cc76b1b5287bde))\n- Live may run media.analyze on OpenVibe.AI (roadmap WS-O task 5): its ai.run.create and ai.run.read grants for openvibe.ai carry the namespaces live.*, network.site_copy and media.analyze (AI 67fb2a4, local-first VOD and clip analysis).… ([`d072928`](https://github.com/OpenVibers/OpenVibe.Network/commit/d0729284b00608fc338b182427141864adbd782f))\n- Live's AI grants move to the new default at boot (follows d072928): CHANGED_DEFAULT_NAMESPACES moves Live's ai.run.create and ai.run.read rows for openvibe.ai from [live.*, network.site_copy] to [live.*, network.site_copy, media.analyze]… ([`9b3835d`](https://github.com/OpenVibers/OpenVibe.Network/commit/9b3835db8bb6c87194ac57bba726573ed69a73f4))\n- Account merge (roadmap WS-B task 5, ADR-029; openvibe-contracts 0.68.0 -> 0.70.0). server/identity/account-merge.js folds a second account into the one a person keeps. The person: the account they keep opens a 10-minute intent (POST… ([`899ca7a`](https://github.com/OpenVibers/OpenVibe.Network/commit/899ca7af5a375d2ebc3bc0d4868cc38413e7de75))\n- A merged account has no tokens of its own (ADR-029, found in the first production merge). Revocation has second precision, so the folded-in account's fresh sign-in token, minted in the same second as the merge, still answered /me for up to… ([`25226d2`](https://github.com/OpenVibers/OpenVibe.Network/commit/25226d22213da2555a49685c60b2d58dcd3fcf2c))\n- Account export and deletion (roadmap WS-B task 7, ADR-033; openvibe-contracts 0.70.0 -> 0.71.0). server/identity/account-data.js. ([`e2787eb`](https://github.com/OpenVibers/OpenVibe.Network/commit/e2787eb4406d354063db96472f21f0c2a1140a1e))\n- Mod principals (roadmap WS-M task 3, ADR-013; openvibe-contracts 0.71.0 -> 0.72.0). server/identity/mod-principals.js: a mod install is the principal mod:<mod_id>, whose grants are the approved subset of what its manifest requests. ([`c3a6441`](https://github.com/OpenVibers/OpenVibe.Network/commit/c3a64415c7d83730168e3cfaaae01c65e14d8abc))\n- The probe principal may manage Games mods (games.mod.manage on openvibe.games) for the production mod lifecycle proof (roadmap WS-M task 6; Games apps/server/scripts/modLifecycleProof.ts installs, grants, uses and revokes a proof mod… ([`2e9b5d5`](https://github.com/OpenVibers/OpenVibe.Network/commit/2e9b5d545b8e26fb1cb09d17b30de1a9cde61904))\n- Live may store a streamer's own provider key in OpenVibe.AI (ai.credential.manage on openvibe.ai; roadmap WS-O task 2, AI fca04c7; openvibe-contracts 0.72.0 -> 0.73.0), so Live stops keeping third-party keys in its database.… ([`d37ee87`](https://github.com/OpenVibers/OpenVibe.Network/commit/d37ee87ffad8e10ff4f486484ef2ccd37ceb3b00))\n- Live may cap a streamer's AI-viewer spend as an AI quota on their attribution (ai.quota.attribution.manage on openvibe.ai; roadmap WS-O task 2, AI 960f14a; openvibe-contracts 0.73.0 -> 0.75.0). test/principals.test.js follows Live's AI… ([`728266b`](https://github.com/OpenVibers/OpenVibe.Network/commit/728266be31fa1170d306712b7f1cbc4324065714))\n- The admin AI panel follows Live's move to OpenVibe.AI (roadmap WS-O task 2, Live 04cd59f): the provider, key, base URL, model and price settings are gone from its list and its help text, and the status line shows which service runs AI… ([`6a686fe`](https://github.com/OpenVibers/OpenVibe.Network/commit/6a686fe8469766acdebc0a9927e86e651a2ff3e9))\n\n## OpenVibe.Games\n\n[openvibe.games](https://openvibe.games) · [repository](https://github.com/OpenVibers/OpenVibe.Games)\n\n- deploy/scripts/deploy.sh: deploys run through ovhost deploy games (OpenVibe.Host strategy pnpm-build; roadmap WS-N task 11). ovhost does the production procedure (pull, pnpm install --frozen-lockfile, pnpm build, restart openvibe-games)… ([`e2d9a5d`](https://github.com/OpenVibers/OpenVibe.Games/commit/e2d9a5d4a64aae279398c0f0819184489212486e))\n- 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… ([`8200c2c`](https://github.com/OpenVibers/OpenVibe.Games/commit/8200c2cf1bd47b713c0e7f9c88ed5ac655eb047d))\n- Games follows account merges (roadmap WS-B task 5, ADR-029). The platform events subscription now also asks for network.subject.merged; a delivery from Network with a valid payload calls store.identity.mergeSubject(from, into, merge_id)… ([`9058cdd`](https://github.com/OpenVibers/OpenVibe.Games/commit/9058cddeb627aa7eee7521e248991098b8fac303))\n- 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… ([`fcb62c5`](https://github.com/OpenVibers/OpenVibe.Games/commit/fcb62c5e10b7a642bffb460d7f2c60ceeeeeb551))\n- Mod grants live in OpenVibe.Network (roadmap WS-M task 3, ADR-013; Network c3a6441, Contracts 0.72.0 mods.grant.manage). With a platform client, the mods API asks Network first and applies only what it answered… ([`86fe34d`](https://github.com/OpenVibers/OpenVibe.Games/commit/86fe34d7c1c3e95e3dd91291ca52a0a428d85d45))\n- apps/server/scripts/modLifecycleProof.ts: one production mod lifecycle (roadmap WS-M task 6, ADR-013). With the operator's probe principal (games.mod.manage on openvibe.games), a fresh proof mod (one inert prop far from spawn, published by… ([`b724b5a`](https://github.com/OpenVibers/OpenVibe.Games/commit/b724b5a1e5a007cdba5dd51ef9929d34a44c454f))\n- Mod budgets are enforced on the offending mod only (roadmap WS-M task 4), and mod security tests (task 5). The runtime already timed each reconcile against the manifest's cpuMs. ([`b5feaf8`](https://github.com/OpenVibers/OpenVibe.Games/commit/b5feaf87420aa494d391c7b69f73dbf08ad5f44f))\n- A late network.mod.grants_changed no longer undoes a newer grant (found by the production lifecycle proof: the register event, revision 1 with nothing approved, arrived after the API had applied revision 2's grant, so the prop flapped off… ([`1529a52`](https://github.com/OpenVibers/OpenVibe.Games/commit/1529a52722bb2600e9cc0c314e5dc3a09561f1ca))\n\n## OpenVibe.Media\n\n[openvibe.media](https://openvibe.media) · [repository](https://github.com/OpenVibers/OpenVibe.Media)\n\n- N-1 fixtures re-recorded from 1157a54, the release now in production (npm run n-1:record). ([`743c86f`](https://github.com/OpenVibers/OpenVibe.Media/commit/743c86ff41ba4693a2dcaa4cecffd76b79d30eaa))\n- The media index loads its theme loader from Media's own /shared (roadmap WS-P task 4, D42): the last shared script a public page still took from openvibe.network (Media already served /shared; browse.js now uses openvibe-shared/serve.url… ([`124ad1a`](https://github.com/OpenVibers/OpenVibe.Media/commit/124ad1a4ca1a5be28b491f92f82f471dfddc376b))\n- Media follows account merges (roadmap WS-B task 5, ADR-029). network.subject.merged arrives at POST /internal/events (the same signed, loopback-only endpoint as the revocations; ensureSubscription now keeps one subscription per topic) and… ([`be0facd`](https://github.com/OpenVibers/OpenVibe.Media/commit/be0facd28e64c0b8e7f7322b69e65a1953103070))\n- N-1 fixtures re-recorded from the release now in production (npm run n-1:record). ([`33ce8c9`](https://github.com/OpenVibers/OpenVibe.Media/commit/33ce8c9756f0cf21ffeaf95b4258b600768efd3d))\n- Media takes part in account export and deletion (roadmap WS-B task 7, ADR-033; openvibe-contracts 0.54.0 -> 0.71.0). POST /internal/events takes network.account.export_requested and network.account.deleted (the boot subscriptions now… ([`a207b1d`](https://github.com/OpenVibers/OpenVibe.Media/commit/a207b1d28b12d333484d087ee37c2c2e3edeee5e))\n- N-1 fixtures re-recorded from a207b1d, the release now in production (npm run n-1:record). ([`793fafe`](https://github.com/OpenVibers/OpenVibe.Media/commit/793fafee262a4ec5cd414323aeb314ca63a77980))\n- Per-actor rate limits at Media's capability boundaries (roadmap WS-R task 4, openvibe-sdk v0.12.0 limits). server/actor-limits.js makes one limiter that counts each caller: the Network token's principal (svc:community, app:app_… of a… ([`1125a3c`](https://github.com/OpenVibers/OpenVibe.Media/commit/1125a3ceb5e05658bfbc39715dcd59bc10006c45))\n\n## OpenVibe.Community\n\n[openvibe.community](https://openvibe.community) · [repository](https://github.com/OpenVibers/OpenVibe.Community)\n\n- N-1 fixtures re-recorded from 69f5feb, the release now in production (npm run n-1:record). ([`49565ac`](https://github.com/OpenVibers/OpenVibe.Community/commit/49565ac101c9753619b4860cc296afbaff939d24))\n- Community follows account merges (roadmap WS-B task 5, ADR-029). network.subject.merged joins the pulse consumer's topics (subscribed at boot) and server/identity/subject-merge.js applies it through the consumer's inbox, once per event, in… ([`794e7e2`](https://github.com/OpenVibers/OpenVibe.Community/commit/794e7e2453306fc6f5f164e86e034a276edf273d))\n- N-1 fixtures re-recorded from the release now in production (npm run n-1:record). ([`fe23860`](https://github.com/OpenVibers/OpenVibe.Community/commit/fe2386080e3697b466c989d48af193060ea08a5d))\n- Community takes part in account export and deletion (roadmap WS-B task 7, ADR-033; openvibe-contracts 0.49.0 -> 0.71.0). The pulse consumer takes network.account.export_requested and network.account.deleted (subscribed at boot).… ([`82e2bb9`](https://github.com/OpenVibers/OpenVibe.Community/commit/82e2bb941f5cae0515c6696e6490bfdd9f7e1437))\n- N-1 fixtures re-recorded from 82e2bb9, the release now in production (npm run n-1:record). ([`7d35b5d`](https://github.com/OpenVibers/OpenVibe.Community/commit/7d35b5d58b39fd6e66712bf40d73443942c28f0f))\n- Per-actor rate limits at Community's API routers (roadmap WS-R task 4, openvibe-sdk v0.12.0 limits). server/actor-limits.js makes one limiter per app, used by the paste, comment, forum (spaces, posts, groups), Pulse and relay APIs once… ([`52d923a`](https://github.com/OpenVibers/OpenVibe.Community/commit/52d923a941f659ccfc7cb442efb2b10349663175))\n\n## OpenVibe.Chat\n\n[openvibe.chat](https://openvibe.chat) · [repository](https://github.com/OpenVibers/OpenVibe.Chat)\n\n- N-1 fixtures re-recorded from d4704b2, the release now in production (npm run n-1:record). ([`4c563fc`](https://github.com/OpenVibers/OpenVibe.Chat/commit/4c563fced97c7fbd87c291b883ed27d41fa07092))\n- N-1 fixtures re-recorded with Live's widget at f0edbc0, the Live release now in production (N1_LIVE_REF=f0edbc0 npm run n-1:record). ([`b3252cb`](https://github.com/OpenVibers/OpenVibe.Chat/commit/b3252cbc7e618f3a54fc21094500b6feea6dd410))\n- Chat follows account merges (roadmap WS-B task 5, ADR-029). network.subject.merged joins the consumer's topics (a sixth subscription at boot) and server/chat/subject-merge.js applies it inside the inbox, once per event, in one transaction.… ([`88202c1`](https://github.com/OpenVibers/OpenVibe.Chat/commit/88202c14a966a312f05ceda17983cadec9918854))\n- N-1 fixtures re-recorded from the Chat release now in production, with Live's widget at efab014 (npm run n-1:record). ([`561cec9`](https://github.com/OpenVibers/OpenVibe.Chat/commit/561cec92f77aad3949ab888e593010703002f61c))\n- Chat takes part in account export and deletion (roadmap WS-B task 7, ADR-033; openvibe-contracts 0.57.0 -> 0.71.0). POST /internal/events takes network.account.export_requested and network.account.deleted (subscribed at boot).… ([`a2d100d`](https://github.com/OpenVibers/OpenVibe.Chat/commit/a2d100db6ae74616273cfb3d9e96188c68d1cc1f))\n\n## OpenVibe.Tools\n\n[openvibe.tools](https://openvibe.tools) · [repository](https://github.com/OpenVibers/OpenVibe.Tools)\n\n- Dev tools run on the network's web runtime; the webhook viewer shows a sender's method and headers as text (roadmap WS-P task 6, the second site; openvibe-shared 1.22.0 -> 1.23.0 in every app). dev.html loads /shared/web-runtime.js (the… ([`68f1330`](https://github.com/OpenVibers/OpenVibe.Tools/commit/68f13302b3f0ccc757b619b93c916cb0c1ac57dc))\n- deploy/scripts/deploy.sh hands over to ovhost deploy tools (OpenVibe.Host strategy multi-app; roadmap WS-N task 11). The old script is kept, unchanged, as deploy/scripts/deploy-legacy.sh. ovhost does what it did (untracked lockfiles the… ([`5768232`](https://github.com/OpenVibers/OpenVibe.Tools/commit/57682322e06783817924cc7229beae0c867547d8))\n- Tools pages run their own pinned shared files (roadmap WS-P task 4, D42: the Tools satellites' static pages). apps/_shared/release.js mounts /shared (openvibe-shared/serve, content-addressed, only the browser files) in every app with the… ([`390d3df`](https://github.com/OpenVibers/OpenVibe.Tools/commit/390d3dfdb10b611b43f0aa7b8c2fdb4d0e2a2e96))\n\n## OpenVibe.Events\n\n[events.openvibe.network](https://events.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Events)\n\n- Per-actor rate limits at Events' capability routes (roadmap WS-R task 4): openvibe-sdk v0.12.0 is now a dependency, and server/actor-limits.js makes one limiter per app that counts each verified principal (svc:live, app:app_…) after its… ([`7530c2f`](https://github.com/OpenVibers/OpenVibe.Events/commit/7530c2ff878551c151d8a5fd8e181e2b6138ef7f))\n\n## OpenRe.Stream\n\n[openre.stream](https://openre.stream) · [repository](https://github.com/OpenVibers/OpenRe.Stream)\n\n- deploy/scripts/deploy.sh hands over to ovhost deploy openre (OpenVibe.Host strategy release-layout; roadmap WS-N task 11). The old script is kept, unchanged, as deploy/scripts/deploy-legacy.sh. deploy (release + api in one), release… ([`fadd8a3`](https://github.com/OpenVibers/OpenRe.Stream/commit/fadd8a320031918eddbfb09e777fb0d0ccaec8d4))\n\n## OpenVibe.Search\n\n[search.openvibe.network](https://search.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Search)\n\n- Per-actor rate limits at Search's API routes (roadmap WS-R task 4): openvibe-sdk v0.12.0 is now a dependency, and server/actor-limits.js makes one limiter per app. Owner routes count the service principal (svc:wiki); query and saved-search… ([`8ed7667`](https://github.com/OpenVibers/OpenVibe.Search/commit/8ed7667ff1e383271ddcc67c709be1bf5e1ba43d))\n\n## OpenVibe.Tips\n\n[openvibe.tips](https://openvibe.tips) · [repository](https://github.com/OpenVibers/OpenVibe.Tips)\n\n- Per-actor rate limits on Tips' /api/v1 (roadmap WS-R task 4, openvibe-sdk v0.12.0 limits). server/api/actor-limits.js makes one limiter per app, counted once api/auth.js resolved the caller and before any work (the idempotency store… ([`1e6bfbb`](https://github.com/OpenVibers/OpenVibe.Tips/commit/1e6bfbb8294c9401c46c066457b165c24bc90d02))\n\n## OpenVibe.VIP\n\n[openvibe.vip](https://openvibe.vip) · [repository](https://github.com/OpenVibers/OpenVibe.VIP)\n\n- Per-actor rate limits on VIP's /api/v1 (roadmap WS-R task 4, openvibe-sdk v0.12.0 limits). server/api/actor-limits.js makes one limiter per app, counted once api/auth.js resolved the caller and before any work, Billing included: a service… ([`0fbcbb5`](https://github.com/OpenVibers/OpenVibe.VIP/commit/0fbcbb53802d2bd4e4dc6e393465a1fce1fc75a9))\n\n---\n\nPatch notes are put together automatically when enough changes have shipped, or when a large feature lands. See every site's own updates page for the live list.","revision":1,"state":"published","visibility":"public","published_at":"2026-09-28T01:38:16.157Z","revised_at":"2026-09-28T01:38:16.156Z","author":{"subject":"usr_01KKT9AC60KM7CRTB3WN1Z8P56","name":"goosely","username":"goosely"},"authorship":{"mode":"imported","workflow":null,"reviewed":false,"disclosure":{"mode":"imported","short":"Imported","long":"Imported from Commit messages from the OpenVibers repositories on GitHub; originally by OpenVibers."}},"tags":["patch-notes","live","ai","network","games","media","community","chat","tools","events","openre"],"categories":[],"series":{"title":"Patch notes","url":"https://openvibe.blog/@openvibe/series/patch-notes","position":null},"media":[],"citations":[],"indexability":{"indexable":true,"robots":"index, follow","reasons":[]}}