{"id":"pst_01M3EE21QW3B55M66SXEDW1TMQ","url":"https://openvibe.blog/@openvibe/patch-notes-chat-parity-script","blog":{"id":"blg_01M362MF0EDJ7QHQTRD8A3Q981","handle":"openvibe","title":"The OpenVibe blog","url":"https://openvibe.blog/"},"title":"Patch notes: Chat parity script","summary":"What shipped on OpenVibe on 2026-09-26: 118 changes to OpenVibe.Host, OpenVibe.Live, OpenVibe.Chat, OpenVibe.Blog, OpenVibe.Codes, OpenVibe.Community and 18 more.","body_markdown":"What shipped on OpenVibe on 2026-09-26: 118 changes to OpenVibe.Host, OpenVibe.Live, OpenVibe.Chat, OpenVibe.Blog, OpenVibe.Codes, OpenVibe.Community and 18 more. Every line below is a commit message from the OpenVibers repositories, linked to the change itself.\n\n## Highlights\n\n- **OpenVibe.Chat:** Chat parity script (roadmap WS-I task 6): scripts/parity.js runs the chat product end to end over the real protocol with two or three people connected and checks what each sees, one scenario per item: join (anonymous and signed in, the… ([`91a36f2`](https://github.com/OpenVibers/OpenVibe.Chat/commit/91a36f29418a8e13ed0a2c147b9e04e5290d131c))\n- **OpenVibe.Host:** docs/release-notifications.md: before a site pins openvibe-shared 1.17.0, its CSP connect-src must allow https://events.openvibe.network (Live and Community do; Network, Wiki, Blog, Codes, Search, Reviews, VIP, Tips, Host, News, Deals and… ([`d098cef`](https://github.com/OpenVibers/OpenVibe.Host/commit/d098cef615c951f0459fa0d2f893c9eb974e4e04))\n\n## OpenVibe.Host\n\n[openvibe.host](https://openvibe.host) · [repository](https://github.com/OpenVibers/OpenVibe.Host)\n\n- Developer path against production, daily (WS-N task 1): openvibe-devpath.timer runs OpenVibe.Examples' developer path as an unprivileged user with a dedicated test account from a root-only env file, writes step outcomes to… ([`7f602fa`](https://github.com/OpenVibers/OpenVibe.Host/commit/7f602faf74eb4bdcf03bb2d4f7e1988f914387ae))\n- Drills run an acceptance subset (WS-S task 2): drill.acceptance lists GETs the restored instance alone must answer with a status and top-level JSON keys — for services whose answers differ from production by nature or that have nothing… ([`561d731`](https://github.com/OpenVibers/OpenVibe.Host/commit/561d731005d176853d75c0b37a4ba84cf9f84536))\n- Restore drill: sources with its acceptance subset (2026-09-25), passed ([`da53761`](https://github.com/OpenVibers/OpenVibe.Host/commit/da53761b81c90165e1308640988972e0d9e6f452))\n- Restore drills: the sources row in the drill table ([`8829dab`](https://github.com/OpenVibers/OpenVibe.Host/commit/8829dab7a8be98ff129730ffa89b4016222a6161))\n- openvibe-toolsjob.timer (WS-L task 4): the Tools job proof every six hours as principal probe; devpath-metrics.sh takes METRIC_PREFIX; alerts OpenVibeToolsJobProofFailed/Missed ([`0cadec3`](https://github.com/OpenVibers/OpenVibe.Host/commit/0cadec3e719aca9d9a1b3c02d22a1d34cfb30801))\n- Protected probes (WS-P task 2): kind sum adds up parts (unknown when any part is, never read as zero; each part validated, no sum in a sum); the example inventory probes Chat sockets (/ready connections), Games players online (readiness… ([`cb0cb55`](https://github.com/OpenVibers/OpenVibe.Host/commit/cb0cb55ff600fcffbfa747013f16db2773bdc06d))\n- Shared-host outage test (WS-P task 5): scripts/shared-host-outage.js loads every public site with openvibe.network blocked and checks content, navigation and theme; the recorded production run passes 18/18 after the Games navigation fix ([`7256966`](https://github.com/OpenVibers/OpenVibe.Host/commit/72569661856427b3e9a51ec4b29c42ddf7b8068a))\n- Lifecycle declarations in ovhost validate (WS-P task 1): lib/lifecycle.js reads each service's lifecycle from the inventory entry (it replaces the manifest's on this host), validate --manifest <file>, or the manifest in the installed… ([`70fc2ea`](https://github.com/OpenVibers/OpenVibe.Host/commit/70fc2eaa2d9eb958ebc9aa132e3d700e10ce805a))\n- Pins: openvibe-contracts 0.49.0 → 0.55.0 (the lifecycle block ovhost validate reads) ([`e1bcba6`](https://github.com/OpenVibers/OpenVibe.Host/commit/e1bcba61844a0f85fd9bbba1f2394d72bac2906d))\n- validate: a git checkout reached through <dir>/current -> <dir>/releases/<id> is a deployed release (Live), so its detached HEAD is not a branch error; tracked changes still are ([`2190761`](https://github.com/OpenVibers/OpenVibe.Host/commit/2190761230ef8c080f0b0a437aa3718dda2d7128))\n- Browser check (WS-Q task 3; WS-T tasks 3-4): scripts/browser-check.js runs openvibe-shared/browser-harness against every public product (the registry's public origins whose home answers HTML; known routes + one sitemap URL per section… ([`2286531`](https://github.com/OpenVibers/OpenVibe.Host/commit/228653124ff6def31bc0efe9ac099bf19d9c588d))\n- browser-check: wait for Chrome to exit and its profile to be removed before the report is written (browser-harness close() now resolves once the profile is gone) ([`3165a90`](https://github.com/OpenVibers/OpenVibe.Host/commit/3165a9096b7eb660ee38925dd71ea7a1fa0fb991))\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 (browser-check finds the harness in the install) ([`3dea84e`](https://github.com/OpenVibers/OpenVibe.Host/commit/3dea84ecbc327427a4640040230e6232e4b6aa43))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`aad998d`](https://github.com/OpenVibers/OpenVibe.Host/commit/aad998dbe13c096e3e65d3bdc491b2a0860361eb))\n- Browser check runs 2026-09-26 after the follow-up deploys: 21/23 sites, then 23/23 after the Live home shell stopped loading ov-mark twice and Tools moved to openvibe-shared 1.16.1 ([`dd0dd12`](https://github.com/OpenVibers/OpenVibe.Host/commit/dd0dd12eafb2232ad604f2d5f2050052ee04c9c0))\n- Release notifications (roadmap WS-P task 9): ovhost publishes host.deploy.activated to OpenVibe.Events ([`62fad64`](https://github.com/OpenVibers/OpenVibe.Host/commit/62fad64f80cb64a119f507fe669244184155332d))\n- docs/release-notifications.md: before a site pins openvibe-shared 1.17.0, its CSP connect-src must allow https://events.openvibe.network (Live and Community do; Network, Wiki, Blog, Codes, Search, Reviews, VIP, Tips, Host, News, Deals and… ([`d098cef`](https://github.com/OpenVibers/OpenVibe.Host/commit/d098cef615c951f0459fa0d2f893c9eb974e4e04))\n- Release notifications publish host.release.published, not host.deploy.activated (WS-P task 9) ([`100c279`](https://github.com/OpenVibers/OpenVibe.Host/commit/100c27949aaf5f434dec5d80f935c9e7a8364f3e))\n- Pins: openvibe-contracts 0.55.0 -> 0.58.0 (host.release.published@1 is validated), openvibe-shared 1.16.1 -> 1.17.0 ([`3ad54fd`](https://github.com/OpenVibers/OpenVibe.Host/commit/3ad54fd24dc3fb62077ef99d62f9acb12f09da2f))\n- Pins: openvibe-shared 1.17.0 -> 1.17.1 (release notifications) ([`5d53eef`](https://github.com/OpenVibers/OpenVibe.Host/commit/5d53eefcedff2583d7552e5ef804d72afb25590a))\n\n## OpenVibe.Live\n\n[openvibe.live](https://openvibe.live) · [repository](https://github.com/OpenVibers/OpenVibe.Live)\n\n- Pins: openvibe-shared 1.14.0 -> 1.16.0 ([`834d9d4`](https://github.com/OpenVibers/OpenVibe.Live/commit/834d9d4bfa6e200ecef87e95a2fc7f455bf70637))\n- A guest's session check answers 200, not 401 (browser check, WS-Q task 3): POST /api/auth/refresh without an ov_refresh cookie answers { access_token: null, user: null }. Every guest page view asks it (public/js/app.js tryRefreshToken… ([`73588d9`](https://github.com/OpenVibers/OpenVibe.Live/commit/73588d9347f934df57ab2f04e75a04cfdfa6429e))\n- Clip page: a missing source VOD is absent, not a 404 (browser check on /clip/369, WS-Q task 3). GET /api/clips/:id says vod_visible: false when the clip's VOD is gone (Media 404) or hidden from this viewer, which is exactly when GET… ([`448f212`](https://github.com/OpenVibers/OpenVibe.Live/commit/448f2125eb80b4523116c71c5be35a437be57ce9))\n- CSP: connect-src allows https://cloudflareinsights.com, where Cloudflare Web Analytics' beacon reports (its script, static.cloudflareinsights.com, was already allowed in script-src and, by mistake, in connect-src). The beacon sends on page… ([`22d388a`](https://github.com/OpenVibers/OpenVibe.Live/commit/22d388a4946027efa584d186ecb0c9b8cf0b63f2))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`2514d14`](https://github.com/OpenVibers/OpenVibe.Live/commit/2514d1493bde82cb116e7965a69a5354cf7f1f2a))\n- The OV mark comes from openvibe-shared (/shared/ov-mark.js, 1.16.1: it stops animating when idle, hidden or off-screen) on the home, kiosk, tos, privacy and dmca pages; Live's older copy (public/js/ov-mark.js), which kept the shared one… ([`953e4b9`](https://github.com/OpenVibers/OpenVibe.Live/commit/953e4b9ebcbc7e0216bd7ee5e3c08da5e9798da5))\n- Home shell: no own <script> for /shared/ov-mark.js; the shared navbar loads it (the browser check counted it twice on every route); kiosk, tos, privacy and dmca have no navbar and keep theirs ([`00c9457`](https://github.com/OpenVibers/OpenVibe.Live/commit/00c9457a69341ae8c78eb4866b83fb8f50a7c286))\n- Chat parity follow-ups on Live (WS-I task 6): bans end at expires_at read as a UTC instant (datetime()), not text, so a timeout given as ISO no longer lasts until midnight UTC on Live's other surfaces; the floating chat widget applies the… ([`0df5662`](https://github.com/OpenVibers/OpenVibe.Live/commit/0df566258482f22ea20cbc733c332775a5da0485))\n- Chat parity gaps, Live's side (roadmap WS-I task 6): the subscriber read for sub-only chat, sub_only as a channel setting, the dashboard's slow mode actually saved, a dashboard delete reaching the whole channel room ([`d4e849f`](https://github.com/OpenVibers/OpenVibe.Live/commit/d4e849f2877445af82681974a616734717966b8d))\n- Release notification after a deploy (roadmap WS-P task 9): deploy.sh runs `ovhost announce live` once the release went live ([`5162b09`](https://github.com/OpenVibers/OpenVibe.Live/commit/5162b094d20a3174a54d4c957d80c63682de0253))\n- Release notification: the event ovhost announce publishes is host.release.published (its own type in openvibe-contracts 0.58.0; host.deploy.activated stays tenant hosting's), in the deploy script's comment and the docs. Comments only (WS-P… ([`cd67c66`](https://github.com/OpenVibers/OpenVibe.Live/commit/cd67c66131b43e77b32b9436500fd9489250e3f6))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`f2b8508`](https://github.com/OpenVibers/OpenVibe.Live/commit/f2b8508b357815e29c415e005a50cc7882b8a14b))\n\n## OpenVibe.Chat\n\n[openvibe.chat](https://openvibe.chat) · [repository](https://github.com/OpenVibers/OpenVibe.Chat)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`15b266b`](https://github.com/OpenVibers/OpenVibe.Chat/commit/15b266bdb33dd4c6807eca57e488917b22eab0a6))\n- A guest's session probe answers 200, not 401 (browser check, WS-Q task 3): GET /auth/me with no ov_token cookie and no Authorization header answers { user: null }, which the shared navbar reads as signed out. It asks on every page view… ([`cf3807a`](https://github.com/OpenVibers/OpenVibe.Chat/commit/cf3807aa7fbd630885c9220d7b8aedb96bc33b6d))\n- Unknown pages answer an HTML 404 page to a browser (browser check, WS-Q task 3: openvibe.chat answered every unknown path with JSON). A GET or HEAD that asks for text/html, outside /api/, /internal/ and /ws/, gets the site's own page… ([`f07cf8e`](https://github.com/OpenVibers/OpenVibe.Chat/commit/f07cf8e5c74873971d76433922f7b6d2f551cd6e))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`0fc8f2e`](https://github.com/OpenVibers/OpenVibe.Chat/commit/0fc8f2e8b643c2a8b2ece096045a32642eb5187a))\n- Moderation found by the parity script (WS-I task 6): timeouts end on time, a ban holds from the moment the moderator is answered, the dashboard's range purge matches its range, and moderators are not slowed. (1) live-context.js read a… ([`e26e063`](https://github.com/OpenVibers/OpenVibe.Chat/commit/e26e063f08d230b8012abeba939d738a2b36971c))\n- Cursor reads name what was deleted under the cursor (reconnect convergence, roadmap D22 and WS-I task 6): a reader that reconnects and reads ?after_id=<cursor> got only the newer rows, so a line deleted while it was away stayed on its… ([`c832274`](https://github.com/OpenVibers/OpenVibe.Chat/commit/c832274557a0386b2d6d2a1b210598721f36a34d))\n- Chat parity script (roadmap WS-I task 6): scripts/parity.js runs the chat product end to end over the real protocol with two or three people connected and checks what each sees, one scenario per item: join (anonymous and signed in, the… ([`91a36f2`](https://github.com/OpenVibers/OpenVibe.Chat/commit/91a36f29418a8e13ed0a2c147b9e04e5290d131c))\n- Parity gaps closed (roadmap WS-I task 6): sub-only mode, blocks in public chat, slow mode as the saved setting, purges and deletes on every surface, /clear says what it does ([`bcc53f4`](https://github.com/OpenVibers/OpenVibe.Chat/commit/bcc53f471b23d7b04ee5117ba3caeedd1fcc27d6))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`df36e31`](https://github.com/OpenVibers/OpenVibe.Chat/commit/df36e31ef48d12f1d68f0bfd5673ae3ad2b78dcb))\n\n## OpenVibe.Blog\n\n[openvibe.blog](https://openvibe.blog) · [repository](https://github.com/OpenVibers/OpenVibe.Blog)\n\n- Pins: openvibe-shared 1.15.0 -> 1.16.0 ([`b512139`](https://github.com/OpenVibers/OpenVibe.Blog/commit/b5121393ddd153f633b7b408ba8372cccc3bbf49))\n- The CSP allows Cloudflare Web Analytics (browser check, WS-Q task 3): script-src https://static.cloudflareinsights.com loads the beacon Cloudflare injects at the edge, connect-src https://cloudflareinsights.com is where it reports. The… ([`8c6b686`](https://github.com/OpenVibers/OpenVibe.Blog/commit/8c6b68639a91e6b4c568e34d74308fd74099b77e))\n- A guest's session probe answers 200, not 401 (browser check, WS-Q task 3): GET /auth/me with no session credential at all answers { user: null }, which the shared navbar reads as signed out. It asks on every page view, and the 401 logged a… ([`897822f`](https://github.com/OpenVibers/OpenVibe.Blog/commit/897822f0617f412023fcf3ddac457665f3bab478))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`be44292`](https://github.com/OpenVibers/OpenVibe.Blog/commit/be44292af09cbc35bda974ef65897de0c898b17d))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`86eb327`](https://github.com/OpenVibers/OpenVibe.Blog/commit/86eb327302e2c2f5ce6c094de5d24daef4996a63))\n\n## OpenVibe.Codes\n\n[openvibe.codes](https://openvibe.codes) · [repository](https://github.com/OpenVibers/OpenVibe.Codes)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`0d8ac03`](https://github.com/OpenVibers/OpenVibe.Codes/commit/0d8ac035800c39b4f1ebbc5e6387d9ca7cf36021))\n- The CSP allows Cloudflare Web Analytics (browser check, WS-Q task 3): script-src https://static.cloudflareinsights.com loads the beacon Cloudflare injects at the edge, connect-src https://cloudflareinsights.com is where it reports. The… ([`0cb7804`](https://github.com/OpenVibers/OpenVibe.Codes/commit/0cb7804cbbfa2f0c890693a241481cdfaab1e795))\n- A guest's session probe answers 200, not 401 (browser check, WS-Q task 3): GET /auth/me with no codes_at or codes_rt cookie (and no Authorization header) answers { user: null }, which the shared navbar reads as signed out. It asks on every… ([`a2127a9`](https://github.com/OpenVibers/OpenVibe.Codes/commit/a2127a9985c28a096069ed2460c194ee20d6d22d))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`a89ab3b`](https://github.com/OpenVibers/OpenVibe.Codes/commit/a89ab3b3cb6482ca231d37c3a36f2086cafa5ebb))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`900559b`](https://github.com/OpenVibers/OpenVibe.Codes/commit/900559b1e582ba930dd1a3ee7a0173f82b60bd3c))\n\n## OpenVibe.Community\n\n[openvibe.community](https://openvibe.community) · [repository](https://github.com/OpenVibers/OpenVibe.Community)\n\n- Pins: openvibe-shared 1.15.0 -> 1.16.0 ([`1bac6a9`](https://github.com/OpenVibers/OpenVibe.Community/commit/1bac6a9724b6524058192cec9489a4786f8ea14a))\n- The CSP allows Cloudflare Web Analytics (browser check, WS-Q task 3): script-src https://static.cloudflareinsights.com loads the beacon Cloudflare injects at the edge, connect-src https://cloudflareinsights.com is where it reports. The… ([`e2f7c1d`](https://github.com/OpenVibers/OpenVibe.Community/commit/e2f7c1da204146a6ba2271c32af27114f0fe59d3))\n- A guest's session probe answers 200, not 401 (browser check, WS-Q task 3): GET /auth/me with no session credential at all answers { user: null }, which the shared navbar reads as signed out. It asks on every page view, and the 401 logged a… ([`564c610`](https://github.com/OpenVibers/OpenVibe.Community/commit/564c61032544a00247afd07be1b067015bb9365a))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`be15c21`](https://github.com/OpenVibers/OpenVibe.Community/commit/be15c21e0470c0794bff80f5ab3709301d690a8d))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`9a468fb`](https://github.com/OpenVibers/OpenVibe.Community/commit/9a468fb68d6ed47bcdbe67edc0c240590c31759c))\n\n## OpenVibe.Media\n\n[openvibe.media](https://openvibe.media) · [repository](https://github.com/OpenVibers/OpenVibe.Media)\n\n- Pins: openvibe-shared 1.15.0 -> 1.16.0 ([`8c3c6fa`](https://github.com/OpenVibers/OpenVibe.Media/commit/8c3c6faecaba2633110c65e31f3ed94417134dc4))\n- Unknown paths answer Express's own 404 page under Media's CSP, which now allows Cloudflare Web Analytics (browser check, WS-Q task 3): server/not-found.js keeps default-src 'none' and adds script-src https://static.cloudflareinsights.com… ([`b578bbb`](https://github.com/OpenVibers/OpenVibe.Media/commit/b578bbba1ca79b94c00d006f41230b6e6ab01915))\n- A guest's session probe answers 200, not 401 (browser check, WS-Q task 3): GET /auth/me with no session credential at all answers { user: null }, which the shared navbar reads as signed out. It asks on every page view, and the 401 logged a… ([`7a0eaac`](https://github.com/OpenVibers/OpenVibe.Media/commit/7a0eaacd620a4869e2f304b5e43b0db0b3921e52))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`c110173`](https://github.com/OpenVibers/OpenVibe.Media/commit/c1101734d6ec5e09f2e339ef10995bc38f2d66e7))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`7d765ea`](https://github.com/OpenVibers/OpenVibe.Media/commit/7d765ea1a858dc4d4a3b4564e33701b116d3ba7f))\n\n## OpenVibe.Wiki\n\n[openvibe.wiki](https://openvibe.wiki) · [repository](https://github.com/OpenVibers/OpenVibe.Wiki)\n\n- Pins: openvibe-shared 1.15.0 -> 1.16.0 ([`679aba4`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/679aba46753f052a263ae99cc00b9e6bf0335534))\n- The CSP allows Cloudflare Web Analytics (browser check, WS-Q task 3): script-src https://static.cloudflareinsights.com loads the beacon Cloudflare injects at the edge, connect-src https://cloudflareinsights.com is where it reports. The… ([`46bac64`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/46bac642169aa46f26f97e665cd96278ca733d8d))\n- A guest's session probe answers 200, not 401 (browser check, WS-Q task 3): GET /auth/me with no session credential at all answers { user: null }, which the shared navbar reads as signed out. It asks on every page view, and the 401 logged a… ([`9409f51`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/9409f51d3084f237adf6c3d200a9f4de514e9fd7))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`40c54a0`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/40c54a0dcff3103397bdd4486722fdbc4f6bd73a))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`7cd86c5`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/7cd86c55b03f22140d83fbd73c4d0a9ffe045d02))\n\n## OpenVibe.AI\n\n[ai.openvibe.network](https://ai.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.AI)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`3fc0b18`](https://github.com/OpenVibers/OpenVibe.AI/commit/3fc0b185d733768fcfa2701a672943be0a841e96))\n- nginx: the commented template for exposing /api/ sets the client-IP headers from $remote_addr (X-Real-IP, X-Forwarded-For, CF-Connecting-IP), like every active location, instead of $proxy_add_x_forwarded_for, which passes a client-sent… ([`f7be9bd`](https://github.com/OpenVibers/OpenVibe.AI/commit/f7be9bd3154e061998126a68aeba7193e94feee4))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`779a031`](https://github.com/OpenVibers/OpenVibe.AI/commit/779a031edf05a7f6957d70b9fed0b29ebadf81c7))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`ce1f414`](https://github.com/OpenVibers/OpenVibe.AI/commit/ce1f414e201176615f32c30d2fd26ed4da656763))\n\n## OpenVibe.Events\n\n[events.openvibe.network](https://events.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Events)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`39eba17`](https://github.com/OpenVibers/OpenVibe.Events/commit/39eba173bca973ce0b56d1aea2658dd05276931e))\n- nginx: the commented template for exposing /api/ sets the client-IP headers from $remote_addr (X-Real-IP, X-Forwarded-For, CF-Connecting-IP), like every active location, instead of $proxy_add_x_forwarded_for, which passes a client-sent… ([`e6dd3c1`](https://github.com/OpenVibers/OpenVibe.Events/commit/e6dd3c1e9e24838985598e16ea528f1eda576c2c))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`dfa5e12`](https://github.com/OpenVibers/OpenVibe.Events/commit/dfa5e122b05ec08dcd2e05a9c620df869396cfcc))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`5f1eafb`](https://github.com/OpenVibers/OpenVibe.Events/commit/5f1eafb0f29c1b547f923b6d28f97b79f522283c))\n\n## OpenVibe.Network\n\n[openvibe.network](https://openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Network)\n\n- Pins: openvibe-shared 1.15.0 -> 1.16.0 ([`d5805c9`](https://github.com/OpenVibers/OpenVibe.Network/commit/d5805c9e60714052556ac3035d95c9feba09ecdc))\n- The CSP allows Cloudflare Web Analytics (browser check, WS-Q task 3): script-src https://static.cloudflareinsights.com loads the beacon Cloudflare injects at the edge, connect-src https://cloudflareinsights.com is where it reports. The… ([`b764d94`](https://github.com/OpenVibers/OpenVibe.Network/commit/b764d944e0737eb6a10b07c69d40f45cb433c70e))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`5084cfe`](https://github.com/OpenVibers/OpenVibe.Network/commit/5084cfe154e0f0d5f1b2f0c02b2abe3cb30ae628))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`2b3998c`](https://github.com/OpenVibers/OpenVibe.Network/commit/2b3998cf944a61ce0feab5ccc63c5c41816c6b7c))\n\n## OpenVibe.Search\n\n[search.openvibe.network](https://search.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Search)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`e90cb82`](https://github.com/OpenVibers/OpenVibe.Search/commit/e90cb828f505e3d7a1a0887654944e31ec7cae72))\n- The CSP allows Cloudflare Web Analytics (browser check, WS-Q task 3): script-src https://static.cloudflareinsights.com loads the beacon Cloudflare injects at the edge, connect-src https://cloudflareinsights.com is where it reports. The… ([`f69ca74`](https://github.com/OpenVibers/OpenVibe.Search/commit/f69ca747a9e1098f8800a49aac016914167c60b6))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`91d2068`](https://github.com/OpenVibers/OpenVibe.Search/commit/91d2068b4a91f34acdeba0cf3d9a335f7510d24c))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`f58f819`](https://github.com/OpenVibers/OpenVibe.Search/commit/f58f8198d69c2ae3b1c72ff5c4b90b29d2486718))\n\n## OpenVibe.Sources\n\n[sources.openvibe.network](https://sources.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Sources)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`375cf8f`](https://github.com/OpenVibers/OpenVibe.Sources/commit/375cf8fefd2ea5afd1f5974626a9d39c00bc5b35))\n- The public landing page's CSP allows Cloudflare Web Analytics (browser check, WS-Q task 3): script-src https://static.cloudflareinsights.com loads the beacon Cloudflare injects at the edge, connect-src https://cloudflareinsights.com is… ([`3abc2de`](https://github.com/OpenVibers/OpenVibe.Sources/commit/3abc2dec34722f9fce3c0914ce8ae0dfa3957d01))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`44c69cc`](https://github.com/OpenVibers/OpenVibe.Sources/commit/44c69cc95d208c32306ec2718fb3162380fc809a))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`32c8c98`](https://github.com/OpenVibers/OpenVibe.Sources/commit/32c8c98160fc6f0c19fa891a543a2514f5b49065))\n\n## OpenVibe.Tools\n\n[openvibe.tools](https://openvibe.tools) · [repository](https://github.com/OpenVibers/OpenVibe.Tools)\n\n- Pins: openvibe-shared -> 1.16.1 in all eight apps (was 1.13.0, gateway 1.15.0): the /updates filter chip contrast fix and the OV mark that stops animating when idle ([`ea03851`](https://github.com/OpenVibers/OpenVibe.Tools/commit/ea03851402810544f579a850b9ae1aa0c59322fe))\n- Release notification after a deploy (roadmap WS-P task 9): deploy.sh runs `ovhost announce tools` once the gateway is healthy ([`782ed60`](https://github.com/OpenVibers/OpenVibe.Tools/commit/782ed607938067441d8567b839dbafa2a2b7d5ff))\n- Release notification: the event ovhost announce publishes is host.release.published (its own type in openvibe-contracts 0.58.0; host.deploy.activated stays tenant hosting's), in the deploy script's comment and the README. Comments only… ([`c25ba2b`](https://github.com/OpenVibers/OpenVibe.Tools/commit/c25ba2b48fa0be472db1aa344c24583b7d1431e4))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`4238494`](https://github.com/OpenVibers/OpenVibe.Tools/commit/4238494f5207e6fa171f1b7bfa79d6d91be78867))\n\n## OpenVibe.Billing\n\n[billing.openvibe.network](https://billing.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Billing)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`04c0ae8`](https://github.com/OpenVibers/OpenVibe.Billing/commit/04c0ae87e2922377d1e85ffe94d46499c9480d81))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`8494483`](https://github.com/OpenVibers/OpenVibe.Billing/commit/8494483436cd24057109c4eff8ad67d108d0a841))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`5c1d552`](https://github.com/OpenVibers/OpenVibe.Billing/commit/5c1d552f299ec77e7f31ff894681feedf7e454f0))\n\n## OpenVibe.Coupons\n\n[openvibe.coupons](https://openvibe.coupons) · [repository](https://github.com/OpenVibers/OpenVibe.Coupons)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`f366b24`](https://github.com/OpenVibers/OpenVibe.Coupons/commit/f366b24a6721fcae1417d5eca19ddae2f1ed463c))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`899873c`](https://github.com/OpenVibers/OpenVibe.Coupons/commit/899873c43c33513f2ab1480426fc5632533e4a15))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`1931942`](https://github.com/OpenVibers/OpenVibe.Coupons/commit/193194265f600c3341ab4302c554960e2d97bb62))\n\n## OpenVibe.Deals\n\n[openvibe.deals](https://openvibe.deals) · [repository](https://github.com/OpenVibers/OpenVibe.Deals)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`ff39f56`](https://github.com/OpenVibers/OpenVibe.Deals/commit/ff39f56704bfab3920705970af44e19311a60a28))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`16823d5`](https://github.com/OpenVibers/OpenVibe.Deals/commit/16823d5788735f560c2390d76d67072d106838ef))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`73221d8`](https://github.com/OpenVibers/OpenVibe.Deals/commit/73221d8e90d7089188ef9245952ad82caf86d247))\n\n## OpenVibe.News\n\n[openvibe.news](https://openvibe.news) · [repository](https://github.com/OpenVibers/OpenVibe.News)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`9460c86`](https://github.com/OpenVibers/OpenVibe.News/commit/9460c86eb14d024489622d11e7d382025c373aa7))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`48a339d`](https://github.com/OpenVibers/OpenVibe.News/commit/48a339d8415e9e1435f154e91ceba3c161681f72))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`9202f90`](https://github.com/OpenVibers/OpenVibe.News/commit/9202f904ba521c064cae14a9adc0fb7c9ee31dff))\n\n## OpenRe.Stream\n\n[openre.stream](https://openre.stream) · [repository](https://github.com/OpenVibers/OpenRe.Stream)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`8f4b3cb`](https://github.com/OpenVibers/OpenRe.Stream/commit/8f4b3cb351ff9f20ecc60c726a00cf14d3d55c0f))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`8686bec`](https://github.com/OpenVibers/OpenRe.Stream/commit/8686bec1e2a4c5e0e2d632cb3500f55988680823))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`e1b2799`](https://github.com/OpenVibers/OpenRe.Stream/commit/e1b27991ab983fa0566fa4b2fa39f86b55779916))\n\n## OpenVibe.Reviews\n\n[openvibe.reviews](https://openvibe.reviews) · [repository](https://github.com/OpenVibers/OpenVibe.Reviews)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`ad96e46`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/ad96e46518b73608954fb04de513eb45bf702268))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`cbf43f5`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/cbf43f515df9175e55087e5517afe831dcb1f577))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`6a57a20`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/6a57a202d5fa6abcb6b531d0e60c1cebbdf28a4a))\n\n## OpenVibe.Tips\n\n[openvibe.tips](https://openvibe.tips) · [repository](https://github.com/OpenVibers/OpenVibe.Tips)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`403b0af`](https://github.com/OpenVibers/OpenVibe.Tips/commit/403b0afd5baf0566bd53977ed50d6469f6538e76))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`7df65f4`](https://github.com/OpenVibers/OpenVibe.Tips/commit/7df65f43a3f75f0fd49b56b1f7c76fbfd3b7d544))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`4c8d635`](https://github.com/OpenVibers/OpenVibe.Tips/commit/4c8d635017384ca92dc1618b0b6aacf6c5421b5c))\n\n## OpenVibe.Trade\n\n[openvibe.trade](https://openvibe.trade) · [repository](https://github.com/OpenVibers/OpenVibe.Trade)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`c82abfa`](https://github.com/OpenVibers/OpenVibe.Trade/commit/c82abfad20d6b99a1179969859bae9b890dcd97c))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`f798f44`](https://github.com/OpenVibers/OpenVibe.Trade/commit/f798f44a02c8fc06797695ad93a4e317e3acc5d1))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`6d81aa8`](https://github.com/OpenVibers/OpenVibe.Trade/commit/6d81aa8203c03ea2974633f87834745c0099d2d6))\n\n## OpenVibe.VIP\n\n[openvibe.vip](https://openvibe.vip) · [repository](https://github.com/OpenVibers/OpenVibe.VIP)\n\n- Pins: openvibe-shared 1.13.0 -> 1.16.0 ([`194153f`](https://github.com/OpenVibers/OpenVibe.VIP/commit/194153fd8f7eed761bfd849e3cd9438ec335bb51))\n- Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen) ([`3695c03`](https://github.com/OpenVibers/OpenVibe.VIP/commit/3695c03b1da287d5b5683d7dde04d7138f8e9aa3))\n- Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications) ([`f2a386e`](https://github.com/OpenVibers/OpenVibe.VIP/commit/f2a386ea64bff6329eddc946e909b51914cb82b6))\n\n## OpenVibe.Games\n\n[openvibe.games](https://openvibe.games) · [repository](https://github.com/OpenVibers/OpenVibe.Games)\n\n- The server's 404 page names the client's icon (<link rel=\"icon\" type=\"image/svg+xml\" href=\"/favicon.svg\">, as the client pages do since 0f29769). Without it the browser asked for /favicon.ico, a second 404 and a console error on every… ([`74d039d`](https://github.com/OpenVibers/OpenVibe.Games/commit/74d039d8d823f5442b04c2e32f9f21265d0eeb40))\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-26T08:42:10.052Z","revised_at":"2026-09-26T08:42:10.047Z","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","host","live","chat","blog","codes","community","media","wiki","ai","events"],"categories":[],"series":{"title":"Patch notes","url":"https://openvibe.blog/@openvibe/series/patch-notes","position":null},"media":[],"citations":[],"indexability":{"indexable":true,"robots":"index, follow","reasons":[]}}