{"id":"pst_01M3F3VX1T15XFM7N72BTMEZN2","url":"https://openvibe.blog/@openvibe/patch-notes-project-export-the-full-archive","blog":{"id":"blg_01M362MF0EDJ7QHQTRD8A3Q981","handle":"openvibe","title":"The OpenVibe blog","url":"https://openvibe.blog/"},"title":"Patch notes: Project export, the full archive","summary":"What shipped on OpenVibe on 2026-09-26: 82 changes to OpenVibe.Host, OpenVibe.Live, OpenVibe.Network, OpenVibe.Community, OpenVibe.Chat, OpenVibe.Events and 18 more.","body_markdown":"What shipped on OpenVibe on 2026-09-26: 82 changes to OpenVibe.Host, OpenVibe.Live, OpenVibe.Network, OpenVibe.Community, OpenVibe.Chat, OpenVibe.Events 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.Codes:** Project export, the full archive (roadmap WS-N task 9): a project's owner or an admin downloads one zip (POST /projects/:project/export/archive) with manifest.json (counts, limits reached, every file's size and SHA-256, what is not… ([`0ef363f`](https://github.com/OpenVibers/OpenVibe.Codes/commit/0ef363fec61088c2c5ca20bb05262939ce98b2de))\n- **OpenVibe.Chat:** Rooms: call and system kinds, the full role set, Community attachments; openvibe.chat: call rooms, the DM inbox, working with Live down (roadmap WS-I tasks 4 and 8) ([`66724bd`](https://github.com/OpenVibers/OpenVibe.Chat/commit/66724bde37b4c8ca64b0eddc6899a176aa4ded3e))\n- **OpenVibe.Network:** Roadmap baseline regenerated 2026-09-26 (WS-Q 6): 604 tables, 2381 routes, 107 call sites, 341 discrepancies; 6/7 exit criteria pass (EC7 waits for the host owner's hazard review). New ownership rules: config_keys/config_snapshots keep… ([`30528fa`](https://github.com/OpenVibers/OpenVibe.Network/commit/30528fa63121465d15331012e7a560a2e18e2524))\n- **OpenVibe.Live:** N-1 harness, the version Chat, Media and Community share (roadmap WS-P task 11): test/n-1/harness.js, scripts/n-1-record.js and test/n-1.test.js are now the same file in all four repositories; only test/n-1/service.js (clients, boot, seed… ([`2ec0dc2`](https://github.com/OpenVibers/OpenVibe.Live/commit/2ec0dc2abadaac28df94d7ad8d88686c28d94f89))\n- **OpenVibe.Community:** N-1 tests (roadmap WS-P task 11): the previous release's clients against this server, and its SQL against this schema. test/n-1.test.js boots this checkout as production runs it (pastes authority community, the shared database) with its… ([`0a3b5ea`](https://github.com/OpenVibers/OpenVibe.Community/commit/0a3b5eab2ea903a6bc9fbc8cda3e2cfafec6e92e))\n- **OpenVibe.Chat:** N-1 tests (roadmap WS-P task 11): the previous release's clients against this server, and its SQL against this schema. test/n-1.test.js boots this checkout with its own test/helpers.js (stub Network and Live) on a database created from the… ([`c4c80d8`](https://github.com/OpenVibers/OpenVibe.Chat/commit/c4c80d8df7c7e4a776bc0b454fab0db832f95770))\n\n## OpenVibe.Host\n\n[openvibe.host](https://openvibe.host) · [repository](https://github.com/OpenVibers/OpenVibe.Host)\n\n- browser-check --network-down (ADR-024, roadmap WS-E task 1): every site's home loads with openvibe.network unreachable (Shared 1.21.0 checkUnreachable) at 390 and 1280 px and must still paint: 200, settled, 120+ characters, a --accent… ([`9d71913`](https://github.com/OpenVibers/OpenVibe.Host/commit/9d719133b172aef1e34458d334bb16217bb55d12))\n- Deploy proofs: Chat resume (WS-P task 3): an anonymous global-chat client across a Chat restart reconnected in 1.1 s and its after_id cursor read returned no missed or duplicate messages; recorded with its limit (a quiet chat: no message… ([`b87b634`](https://github.com/OpenVibers/OpenVibe.Host/commit/b87b634e3c6ae449551ceafdd164c4fa3c85ecb9))\n- Deploy proofs: game shard (WS-P task 3): graceful stop saved the world in 34 ms and closed clients with 1012 server_restart; a reconnect made during the 2 s restart hung over 40 s instead of failing fast (recorded as an open finding… ([`8f49d50`](https://github.com/OpenVibers/OpenVibe.Host/commit/8f49d500fc34333c7e44745925523ccd05cff7e4))\n- Deploy proofs, game shard: the hung reconnect was the probe's own; the game client polls /healthz and reloads after a restart. What is left is a first connect without a timeout during the 2 s gap ([`a666ca1`](https://github.com/OpenVibers/OpenVibe.Host/commit/a666ca1735598bb60a4f0fee6f2d9353742ca831))\n- Deploy proofs, game shard: the first-connect edge is fixed (Games b207e78) ([`b9a4a48`](https://github.com/OpenVibers/OpenVibe.Host/commit/b9a4a4891bf0a64046fdd93dd93757eee356e8ef))\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`7514789`](https://github.com/OpenVibers/OpenVibe.Host/commit/75147890e32dd63fd1363f843c87415f90d5b2dd))\n- ovhost alerts relay (roadmap WS-H task 11): the alerts firing in the host's Prometheus now reach the operator. Every two minutes (openvibe-alerts.timer) it reads /api/v1/alerts, keeps the firing ones, and sends the complete set to… ([`972d9db`](https://github.com/OpenVibers/OpenVibe.Host/commit/972d9dbc174830f5a3ade6fc6d6151788d8adba6))\n- The release UX check (roadmap WS-H task 11): ovhost browser-watch --sites live (openvibe-browsercheck.timer, every 5 minutes) checks each watched site in Chrome after every release (read from /release.json) and once a day. Chrome runs as… ([`9d4c552`](https://github.com/OpenVibers/OpenVibe.Host/commit/9d4c552dbe595f97005398a8cfbe02efc1275fab))\n- browser-watch: all 23 public sites, and one alert per site across releases. The release moves from openvibe_browser_check_ok's labels to openvibe_browser_check_release_info{service,release}, which the alert summary reads. Before this, each… ([`3d5d8e7`](https://github.com/OpenVibers/OpenVibe.Host/commit/3d5d8e792bbf1ced0141e790689247af31526212))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`764e746`](https://github.com/OpenVibers/OpenVibe.Host/commit/764e746fed9b1649203d67e8e3633609d611e7c2))\n\n## OpenVibe.Live\n\n[openvibe.live](https://openvibe.live) · [repository](https://github.com/OpenVibers/OpenVibe.Live)\n\n- Performance audit: the 2026-09-26 measurement after the release-client work (WS-T task 2): the home page on production against the recorded baseline; release-watch adds one request and no measurable paint or blocking cost ([`a13c2bd`](https://github.com/OpenVibers/OpenVibe.Live/commit/a13c2bddf298cf0bf554cdffc255a6fe53278f55))\n- GOLIVE_NOTIFY=events (compatibility register C-85): leave go-live notifications to Network's live.stream.started consumer. While Live's events outbox publishes, a go-live then makes neither the direct POST /internal/events/stream-live nor… ([`e96383b`](https://github.com/OpenVibers/OpenVibe.Live/commit/e96383be3781fcdc323153a84bbda2eeaec0511e))\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`8caa540`](https://github.com/OpenVibers/OpenVibe.Live/commit/8caa540466f9af86247febdbba1339b68919a42f))\n- N-1 tests (roadmap WS-P task 11): the previous release's client against this server, and its SQL against this schema. test/n-1.test.js boots this checkout in the drill sandbox (writes let through by test/n-1/preload.js) on a database… ([`dad5cad`](https://github.com/OpenVibers/OpenVibe.Live/commit/dad5cad2f5896367a036bf95ec6e02895115e5e1))\n- N-1 harness, the version Chat, Media and Community share (roadmap WS-P task 11): test/n-1/harness.js, scripts/n-1-record.js and test/n-1.test.js are now the same file in all four repositories; only test/n-1/service.js (clients, boot, seed… ([`2ec0dc2`](https://github.com/OpenVibers/OpenVibe.Live/commit/2ec0dc2abadaac28df94d7ad8d88686c28d94f89))\n- Broadcast workspace: End stream calls DELETE /api/streams/:id, the route that ends a stream (owner or staff). It posted to /api/streams/:id/end, which no route serves, so the button answered 'Failed to end stream' with a 404. Found by the… ([`5caa46d`](https://github.com/OpenVibers/OpenVibe.Live/commit/5caa46d5cbac7029e9af1a5505c721b432cf482d))\n- N-1 fixtures re-recorded from 5caa46d, the release now in production (npm run n-1:record). ([`c85121d`](https://github.com/OpenVibers/OpenVibe.Live/commit/c85121d1adc0ae4ae615d65626d13729a84f47a0))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`13525eb`](https://github.com/OpenVibers/OpenVibe.Live/commit/13525ebd51a488775929d849bfa103637a2a2e02))\n- N-1 fixtures re-recorded from 13525eb, the release now in production (npm run n-1:record). ([`257bb25`](https://github.com/OpenVibers/OpenVibe.Live/commit/257bb254e44970e2ba274dc338e346a842346dd9))\n- Unresolved lineage references for operators (roadmap D20, remaining item 2). Every unresolved answer of the canonical resolver is counted in lineage_unresolved by its inputs (canonical 'clip_id=7 slug=x') and reason, with detail, last… ([`4479b66`](https://github.com/OpenVibers/OpenVibe.Live/commit/4479b66702afefd7905c2020666e51cad7eaefa9))\n\n## OpenVibe.Network\n\n[openvibe.network](https://openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Network)\n\n- Export tokens (roadmap WS-N task 9): POST /api/v1/projects/:project/export-tokens { audience, env } mints, for the project's owner or an admin member only (developers, viewers and staff who are not an admin member are refused; archived… ([`fbbfc97`](https://github.com/OpenVibers/OpenVibe.Network/commit/fbbfc975adc264c6fc2e5a6f3e4c9eec2a7e1069))\n- The notification badge over Events (roadmap WS-E task 3, WS-F task 1; ADR-005 amendment 2, Contracts 0.61.0): every notification NotificationService.create() stores is announced as network.notification.created, queued in… ([`c5d4714`](https://github.com/OpenVibers/OpenVibe.Network/commit/c5d471453130e8ad82dc0cf8484da341dec8f781))\n- Pins: openvibe-contracts -> 0.61.0 (network.notification.created@1, identity.realtime-ticket-claims@1, network.realtime-ticket-result@1) ([`b400914`](https://github.com/OpenVibers/OpenVibe.Network/commit/b400914ba9c33e8eebcb8bc64b007523e49a3759))\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`9c06889`](https://github.com/OpenVibers/OpenVibe.Network/commit/9c0688923b807571f2312115a20f4f35062ef39b))\n- openvibe.network turns on the realtime notification badge first (notificationsRealtime: true on the home page and My account; Shared 1.22.0): a new notification reaches the badge over Events realtime with a single-use ticket, polling stays… ([`a7b99c7`](https://github.com/OpenVibers/OpenVibe.Network/commit/a7b99c7f8791a9ebe42b550d17e89b4599b26715))\n- Roadmap baseline regenerated 2026-09-26 (WS-Q 6): 604 tables, 2381 routes, 107 call sites, 341 discrepancies; 6/7 exit criteria pass (EC7 waits for the host owner's hazard review). New ownership rules: config_keys/config_snapshots keep… ([`30528fa`](https://github.com/OpenVibers/OpenVibe.Network/commit/30528fa63121465d15331012e7a560a2e18e2524))\n- Operator alerts (roadmap WS-H task 11; Contracts v0.62.0 network.operator.alert): POST /internal/operator/alerts takes Host's service token only (legacy: false) and the complete set of alerts firing on the production host… ([`11f2ea5`](https://github.com/OpenVibers/OpenVibe.Network/commit/11f2ea5ae97eba7976209c1a102025e74fb74cf7))\n\n## OpenVibe.Community\n\n[openvibe.community](https://openvibe.community) · [repository](https://github.com/OpenVibers/OpenVibe.Community)\n\n- A space can attach a chat room on OpenVibe.Chat (roadmap WS-I task 4): its owner (the space's creator, or the creator whose members' space it is) or discussion staff attach one room by address or link, from the space page without… ([`50668b7`](https://github.com/OpenVibers/OpenVibe.Community/commit/50668b70678bf42f311c21592db6be5032b86c0c))\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`19441aa`](https://github.com/OpenVibers/OpenVibe.Community/commit/19441aa2511a7648f1dd3c1d9f70fe74e41cb530))\n- N-1 tests (roadmap WS-P task 11): the previous release's clients against this server, and its SQL against this schema. test/n-1.test.js boots this checkout as production runs it (pastes authority community, the shared database) with its… ([`0a3b5ea`](https://github.com/OpenVibers/OpenVibe.Community/commit/0a3b5eab2ea903a6bc9fbc8cda3e2cfafec6e92e))\n- Pulse shows game milestones (roadmap WS-M task 2, PF7): Community subscribes to network.module.updated, and a person's games.progress.summary write (level is a public field in Contracts) updates game_progress. A later write crossing a… ([`90edad6`](https://github.com/OpenVibers/OpenVibe.Community/commit/90edad62e3722c7c4303da96473421cb865ec080))\n- N-1 fixtures re-recorded from 90edad6, the release now in production (npm run n-1:record). ([`a0db8c4`](https://github.com/OpenVibers/OpenVibe.Community/commit/a0db8c4baecf029d75fed5ea9f745345fdc24094))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`ccdab27`](https://github.com/OpenVibers/OpenVibe.Community/commit/ccdab27c583fbc2b4f47059fb64607bf179f5229))\n\n## OpenVibe.Chat\n\n[openvibe.chat](https://openvibe.chat) · [repository](https://github.com/OpenVibers/OpenVibe.Chat)\n\n- Rooms: call and system kinds, the full role set, Community attachments; openvibe.chat: call rooms, the DM inbox, working with Live down (roadmap WS-I tasks 4 and 8) ([`66724bd`](https://github.com/OpenVibers/OpenVibe.Chat/commit/66724bde37b4c8ca64b0eddc6899a176aa4ded3e))\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`739d3a1`](https://github.com/OpenVibers/OpenVibe.Chat/commit/739d3a1cdc22fbb0717e4df4abd6b7e4ad31a8f1))\n- N-1 tests (roadmap WS-P task 11): the previous release's clients against this server, and its SQL against this schema. test/n-1.test.js boots this checkout with its own test/helpers.js (stub Network and Live) on a database created from the… ([`c4c80d8`](https://github.com/OpenVibers/OpenVibe.Chat/commit/c4c80d8df7c7e4a776bc0b454fab0db832f95770))\n- N-1 test: the booted release's stub data directory (test/helpers.js's temp directory) goes when it exits, so each run leaves nothing in the temp directory ([`04bdd66`](https://github.com/OpenVibers/OpenVibe.Chat/commit/04bdd6636b8ab5208b377383494735a30e813ed4))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`6181238`](https://github.com/OpenVibers/OpenVibe.Chat/commit/6181238618da319c38a7d3876a004a9be1d50759))\n\n## OpenVibe.Events\n\n[events.openvibe.network](https://events.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Events)\n\n- Export tokens pinned (roadmap WS-N task 9): OpenVibe.Codes' project archive pulls a project's app events with Network's read-only export token (sub app:app_<project ULID>, events.app.read, env, purpose export). Events takes it unchanged… ([`272da87`](https://github.com/OpenVibers/OpenVibe.Events/commit/272da87347902c02caf6f1d3d8c2da8dcb5ffdb8))\n- Realtime tickets (roadmap WS-E task 3, WS-F task 1; ADR-005 amendment 2, Contracts 0.61.0 identity.realtime-ticket-claims@1): /realtime/stream?ticket= opens a stream as the signed-in person from any OpenVibe site without a third-party… ([`aa34acb`](https://github.com/OpenVibers/OpenVibe.Events/commit/aa34acb3142a1d9b726c200eede0589a99b810b7))\n- Pins: openvibe-contracts -> 0.61.0 (network.notification.created@1, identity.realtime-ticket-claims@1, network.realtime-ticket-result@1) ([`3252f62`](https://github.com/OpenVibers/OpenVibe.Events/commit/3252f62263e1643f5ddc5752b3294609e22bd5f3))\n- nginx: /realtime/stream is logged without its query string (log_format ov_events_noquery in conf.d), so the single-use ?ticket= never reaches the access log; installed on the host ([`52e1615`](https://github.com/OpenVibers/OpenVibe.Events/commit/52e1615aa4755fadb0a42c3089a90e277a5684bf))\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`eb98f8c`](https://github.com/OpenVibers/OpenVibe.Events/commit/eb98f8cad2a738fec45f1c10e373081532c83e91))\n\n## OpenVibe.Tools\n\n[openvibe.tools](https://openvibe.tools) · [repository](https://github.com/OpenVibers/OpenVibe.Tools)\n\n- One upload runtime (roadmap WS-L task 3): apps/_shared/upload.js createUploads({ multer, config, storage, maxFiles, rejectHint }) replaces img's, audio's and docs' own multer middleware (memory for img, disk for audio and docs, 5 and 50… ([`20bb30c`](https://github.com/OpenVibers/OpenVibe.Tools/commit/20bb30c942b74a86e59eaed80c537d025f35fcf6))\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`168e511`](https://github.com/OpenVibers/OpenVibe.Tools/commit/168e5110d062f076c2c4afe88e3fc3c53ab44613))\n- apps/_shared is a versioned package, openvibe-tools-shared 1.0.0 (roadmap WS-L task 3, the last part): package.json and CHANGELOG.md carry its version, and every app declares the range it was written against (\"openvibeToolsShared\"… ([`37e6cf3`](https://github.com/OpenVibers/OpenVibe.Tools/commit/37e6cf3c46a51872636f72562f55b4765407cb1d))\n- deploy.sh: apps/_shared is not an app. Now that it has a package.json (37e6cf3), the install, dependency and guard-preflight loops over apps/*/ took it for one, and the guard preflight aborted the deploy (nothing restarted) trying to load… ([`9102d60`](https://github.com/OpenVibers/OpenVibe.Tools/commit/9102d600e0232a54bd950da5ce38780ac9136664))\n\n## OpenVibe.Codes\n\n[openvibe.codes](https://openvibe.codes) · [repository](https://github.com/OpenVibers/OpenVibe.Codes)\n\n- Project export, the full archive (roadmap WS-N task 9): a project's owner or an admin downloads one zip (POST /projects/:project/export/archive) with manifest.json (counts, limits reached, every file's size and SHA-256, what is not… ([`0ef363f`](https://github.com/OpenVibers/OpenVibe.Codes/commit/0ef363fec61088c2c5ca20bb05262939ce98b2de))\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`0bfdf70`](https://github.com/OpenVibers/OpenVibe.Codes/commit/0bfdf708ffae5d1ad02f8572ccbc9505b06ade82))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`d0dbc22`](https://github.com/OpenVibers/OpenVibe.Codes/commit/d0dbc22469b97151d529fd776e934502d28a3fb7))\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.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`b00aa4c`](https://github.com/OpenVibers/OpenVibe.Search/commit/b00aa4c20c0f6e8d9a3a1c85f543ee2d384da050))\n- Search's palette also answers the network token names (--text-primary, --text-secondary, --bg-secondary, --border). The shared shipped.js widget on the home page read them, fell back to its dark defaults on Search's light page, and failed… ([`0c00ac0`](https://github.com/OpenVibers/OpenVibe.Search/commit/0c00ac07eaa68e7981107e10157f0948d1c0115a))\n- Search's palette follows the network theme: --bg, --fg, --muted and --line now derive from --bg-primary, --text-primary, --text-secondary and --border, which the Frame's theme loader sets on <html>, with the old light and dark values as… ([`78fe5cd`](https://github.com/OpenVibers/OpenVibe.Search/commit/78fe5cd86c94c94963cb68bf9244d9a133afa9d1))\n\n## OpenVibe.AI\n\n[ai.openvibe.network](https://ai.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.AI)\n\n- Seed workflow tools.describe (roadmap WS-O task 11): a draft description of one tool from its descriptor (summary, how-to, inputs and outputs, limits, FAQ), every statement cited to the descriptor and unknowns in gaps, never… ([`855eca0`](https://github.com/OpenVibers/OpenVibe.AI/commit/855eca02c12699f8c091b6261786fba41f908c45))\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`c3ee605`](https://github.com/OpenVibers/OpenVibe.AI/commit/c3ee6056b96d74a99b25ebebf671e86c9d9d4b24))\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.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`180e246`](https://github.com/OpenVibers/OpenVibe.Billing/commit/180e246a3a344c062f1c7435303f4aa748f17046))\n- Policy page: the price-tier table's horizontal scroller is keyboard-reachable (tabindex=0, role=region, a label and a focus ring). axe scrollable-region-focusable (serious) on /policy, found by Host's new release UX check (ovhost… ([`db8109c`](https://github.com/OpenVibers/OpenVibe.Billing/commit/db8109ca0a92073c43e2a9d93aa30d578830164a))\n\n## OpenVibe.Blog\n\n[openvibe.blog](https://openvibe.blog) · [repository](https://github.com/OpenVibers/OpenVibe.Blog)\n\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`79e9e15`](https://github.com/OpenVibers/OpenVibe.Blog/commit/79e9e153ca1308311993a31295fd471a8becaf8d))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`36306fb`](https://github.com/OpenVibers/OpenVibe.Blog/commit/36306fbe84e0c39b679dd1998cfaa174dfddd1ab))\n\n## OpenVibe.Coupons\n\n[openvibe.coupons](https://openvibe.coupons) · [repository](https://github.com/OpenVibers/OpenVibe.Coupons)\n\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`348f585`](https://github.com/OpenVibers/OpenVibe.Coupons/commit/348f585cd6549a5c506171fba0fc2c5462dede32))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`39dcc1e`](https://github.com/OpenVibers/OpenVibe.Coupons/commit/39dcc1e2d1482d654968d294f4b35318f68575e8))\n\n## OpenVibe.Deals\n\n[openvibe.deals](https://openvibe.deals) · [repository](https://github.com/OpenVibers/OpenVibe.Deals)\n\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`99bd438`](https://github.com/OpenVibers/OpenVibe.Deals/commit/99bd438b40abd42502e3b2c4c57a62eaabd091a9))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`45e1125`](https://github.com/OpenVibers/OpenVibe.Deals/commit/45e112556ccfaf61fdefc05e59318c2d8c7e7171))\n\n## OpenVibe.Media\n\n[openvibe.media](https://openvibe.media) · [repository](https://github.com/OpenVibers/OpenVibe.Media)\n\n- Export tokens pinned (roadmap WS-N task 9): OpenVibe.Codes' project archive lists a project's objects, namespaces and download URLs with Network's read-only export token (sub app:app_<project ULID>, media.object.list + media.object.read… ([`777dbf0`](https://github.com/OpenVibers/OpenVibe.Media/commit/777dbf0c18c7ac484f0ed0a2ccbeefda0e6a724b))\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`b7fbe65`](https://github.com/OpenVibers/OpenVibe.Media/commit/b7fbe65029f38fd3ec6b10919eab9b8ba13df9d4))\n\n## OpenVibe.News\n\n[openvibe.news](https://openvibe.news) · [repository](https://github.com/OpenVibers/OpenVibe.News)\n\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`0860cf2`](https://github.com/OpenVibers/OpenVibe.News/commit/0860cf20dd3d8e8032caad300e0ce90497195b96))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`dab7977`](https://github.com/OpenVibers/OpenVibe.News/commit/dab79776dcc1b1379470ff7c514034be773c5492))\n\n## OpenRe.Stream\n\n[openre.stream](https://openre.stream) · [repository](https://github.com/OpenVibers/OpenRe.Stream)\n\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`b34dcd6`](https://github.com/OpenVibers/OpenRe.Stream/commit/b34dcd688867f0c6ae6c16f03b206e1bd3cd7304))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`ff4e5a7`](https://github.com/OpenVibers/OpenRe.Stream/commit/ff4e5a70c3415984aada1a9208c3b1a560c62745))\n\n## OpenVibe.Reviews\n\n[openvibe.reviews](https://openvibe.reviews) · [repository](https://github.com/OpenVibers/OpenVibe.Reviews)\n\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`cfc37ac`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/cfc37ac5b72ecc7a4e913881d3c916a1f3823fa8))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`a0e730d`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/a0e730df6d83346ae5ce83c9d9bf88a2505adf5f))\n\n## OpenVibe.Sources\n\n[sources.openvibe.network](https://sources.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Sources)\n\n- README: processing jobs, who does what (roadmap WS-O task 7): dedupe within a source and the coarse category stay in Sources; cross-source dedupe, fine classification, summaries (through OpenVibe.AI's seeded workflows) and quality checks… ([`9d88e57`](https://github.com/OpenVibers/OpenVibe.Sources/commit/9d88e57fdec424ac24422964fe75bc4d78ac7ebd))\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`29cd386`](https://github.com/OpenVibers/OpenVibe.Sources/commit/29cd386241c44456ffcebf70b6be287fa9a08aaa))\n\n## OpenVibe.Tips\n\n[openvibe.tips](https://openvibe.tips) · [repository](https://github.com/OpenVibers/OpenVibe.Tips)\n\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`1d558c5`](https://github.com/OpenVibers/OpenVibe.Tips/commit/1d558c51e25b5c9a8f9a3e3312905103eb1fa879))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`819d855`](https://github.com/OpenVibers/OpenVibe.Tips/commit/819d8559ac424a8a6912b0d89ec75ba3652153f6))\n\n## OpenVibe.Trade\n\n[openvibe.trade](https://openvibe.trade) · [repository](https://github.com/OpenVibers/OpenVibe.Trade)\n\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`fa38288`](https://github.com/OpenVibers/OpenVibe.Trade/commit/fa382881cd92ee90b6329699d7d79129e32a6325))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`046d4ee`](https://github.com/OpenVibers/OpenVibe.Trade/commit/046d4eee7f266f813f8b5612229b55757971a50c))\n\n## OpenVibe.VIP\n\n[openvibe.vip](https://openvibe.vip) · [repository](https://github.com/OpenVibers/OpenVibe.VIP)\n\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`4ddf723`](https://github.com/OpenVibers/OpenVibe.VIP/commit/4ddf723e72b141d05e55dfcbfd3126e20da3f47d))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`214e2ba`](https://github.com/OpenVibers/OpenVibe.VIP/commit/214e2ba3c3313c79848130f24a1fea587889e23d))\n\n## OpenVibe.Wiki\n\n[openvibe.wiki](https://openvibe.wiki) · [repository](https://github.com/OpenVibers/OpenVibe.Wiki)\n\n- Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check) ([`38a17bd`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/38a17bddaba5748ed44622f204cb3a2716c7fd6a))\n- The notification bell hears new notifications as they happen (notificationsRealtime; Shared 1.22.0, roadmap WS-E task 3): Network's network.notification.created over OpenVibe.Events' realtime stream, with polling as the fallback. Only a… ([`0bb8400`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/0bb84008dee84952d7d9e4d01aed07c24b298b15))\n\n## OpenVibe.Games\n\n[openvibe.games](https://openvibe.games) · [repository](https://github.com/OpenVibers/OpenVibe.Games)\n\n- Client: the first connect gives up after 10 s, and a refused or timed-out connect waits for the server and reloads, as a dropped connection already did (WS-P task 3 game-shard proof: an upgrade sent during a restart can wait with no… ([`b207e78`](https://github.com/OpenVibers/OpenVibe.Games/commit/b207e78909f7d2927bbb2ebc802389b4dd4f2647))\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-26T15:03:17.309Z","revised_at":"2026-09-26T15:03:17.307Z","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","network","community","chat","events","tools","codes","search","ai"],"categories":[],"series":{"title":"Patch notes","url":"https://openvibe.blog/@openvibe/series/patch-notes","position":null},"media":[],"citations":[],"indexability":{"indexable":true,"robots":"index, follow","reasons":[]}}