{"id":"pst_01M4PG9FZ1B052048YVDCQW140","url":"https://openvibe.blog/@openvibe/patch-notes-52-changes-across-23-sites","blog":{"id":"blg_01M362MF0EDJ7QHQTRD8A3Q981","handle":"openvibe","title":"The OpenVibe blog","url":"https://openvibe.blog/"},"title":"Patch notes: 52 changes across 23 sites","summary":"What shipped on OpenVibe on 2026-10-11: 52 changes to OpenVibe.Live, OpenVibe.Bot, OpenVibe.Community, OpenVibe.Watch, OpenVibe.Chat, OpenVibe.Media and 17 more.","body_markdown":"What shipped on OpenVibe on 2026-10-11: 52 changes to OpenVibe.Live, OpenVibe.Bot, OpenVibe.Community, OpenVibe.Watch, OpenVibe.Chat, OpenVibe.Media and 17 more. Every line below is a commit message from the OpenVibers repositories, linked to the change itself.\n\n## OpenVibe.Live\n\n[openvibe.live](https://openvibe.live) · [repository](https://github.com/OpenVibers/OpenVibe.Live)\n\n- Live: CHAT_AUTHORITY is retired; Chat runs chat with no switch (C-01) (#94) ([`5d82244`](https://github.com/OpenVibers/OpenVibe.Live/commit/5d8224461ad5c23df54a1dfa33ee9964554c14ef))\n- Live: the legacy token cookie is neither set nor read; ov_token is the session cookie (C-05) (#95) ([`3a1b580`](https://github.com/OpenVibers/OpenVibe.Live/commit/3a1b5807860f72653c747621199ee345a95f27db))\n- Live: comment threads are addressed by access id; resolve takes a thread with no numeric id (C-14 step 1) (#96) ([`d0f646e`](https://github.com/OpenVibers/OpenVibe.Live/commit/d0f646e0af2ec0decd9831374b509da19296b2e5))\n- Docs: the go-live flow is Events then Network's consumer (C-85 leftovers) (#97) ([`176eff7`](https://github.com/OpenVibers/OpenVibe.Live/commit/176eff7d5628a922ba857579627d8fad32992dcb))\n- Live: players and thumbnails ask Media by id; no file-name Media URLs (C-75) (#98) ([`3c0b805`](https://github.com/OpenVibers/OpenVibe.Live/commit/3c0b8054e8ceb1c9414f11eb63629a1ec54838fc))\n- Docs: new robots connect through OpenVibe.Bot and the Node, not the stream-key socket (#99) ([`7aceb2f`](https://github.com/OpenVibers/OpenVibe.Live/commit/7aceb2f550400c2e510899ff38347dc4828bbdc8))\n- Live: home paste counts come only from Community (#100) ([`33ba495`](https://github.com/OpenVibers/OpenVibe.Live/commit/33ba49585028f6966301e6fb585ead48c9ce41d1))\n\n## OpenVibe.Bot\n\n[openvibe.bot](https://openvibe.bot) · [repository](https://github.com/OpenVibers/OpenVibe.Bot)\n\n- Bot: drive from the embedded panel with a one-time ticket; a device's local stop is shown as one (#77) ([`557db34`](https://github.com/OpenVibers/OpenVibe.Bot/commit/557db346518de467d557ce86e98f35eb53b5ec8f))\n- Bot: the LOOI desktop robot profile (looi); the panel shows device faults and refusals (#78) ([`91cc7c9`](https://github.com/OpenVibers/OpenVibe.Bot/commit/91cc7c929b05e94b5803e2d9258481e44c09ea56))\n- Bot home: the panel under a Live stream drives; a stop on the robot holds (#79) ([`bdf5c88`](https://github.com/OpenVibers/OpenVibe.Bot/commit/bdf5c88e548cfe03d15bff0d7bb98269db6716fd))\n- Bot: the Live controls export reads Live's PostgreSQL (the conversion can run) (#80) ([`2bbb2fb`](https://github.com/OpenVibers/OpenVibe.Bot/commit/2bbb2fbf615d9353be8fe1241c8dcca6d2321e72))\n- openvibe-shared v4.0.0 (was v3.0.1) (#81) ([`9de57ef`](https://github.com/OpenVibers/OpenVibe.Bot/commit/9de57ef33460a8fd773e9c3022adbbde98a3561b))\n\n## OpenVibe.Community\n\n[openvibe.community](https://openvibe.community) · [repository](https://github.com/OpenVibers/OpenVibe.Community)\n\n- Community: a JWT without subject_id is no identity; censor takes a slug only (C-15) (#62) ([`eafef6c`](https://github.com/OpenVibers/OpenVibe.Community/commit/eafef6c5ee3d5cc5725137e07308b32dd0a5b11a))\n- Community: services are handed a thread's access id (C-14 step 2) (#63) ([`a94dcac`](https://github.com/OpenVibers/OpenVibe.Community/commit/a94dcac5949ccec713b478210382e359a7bf4870))\n- Community: threads are addressed by access id only, services included (C-14 step 3) (#64) ([`aaf5847`](https://github.com/OpenVibers/OpenVibe.Community/commit/aaf58473093486f3ca68710214f1bafeebee1fb9))\n- openvibe-shared v4.0.0 (was v3.0.1) (#65) ([`95e4eb7`](https://github.com/OpenVibers/OpenVibe.Community/commit/95e4eb785adb1a5585c1693e59fddf4ca462d487))\n\n## OpenVibe.Watch\n\n[openvibe.watch](https://openvibe.watch) · [repository](https://github.com/OpenVibers/OpenVibe.Watch)\n\n- Watch: event sources: a watch woken by OpenVibe.Events, never polled (plan T18 step 5) (#40) ([`2a8bc0d`](https://github.com/OpenVibers/OpenVibe.Watch/commit/2a8bc0d246c7692eae11fac88bed41146f6706b9))\n- Watch: webhook sources: a watch woken by a signed POST to /hooks/<id> (plan T18 step 5) (#41) ([`03ec80d`](https://github.com/OpenVibers/OpenVibe.Watch/commit/03ec80d062b403c3a851e7771a36108babb9c7c9))\n- Watch site: the webhook template, its shown-once secret and a new-secret button (#42) ([`267663a`](https://github.com/OpenVibers/OpenVibe.Watch/commit/267663a06928870a5ccef10bfbfd7165c9041f8b))\n- Watch: the text index, description and README name webhooks and events (#43) ([`432f321`](https://github.com/OpenVibers/OpenVibe.Watch/commit/432f3218aff18f28ca24de97961dfea26ace659a))\n\n## OpenVibe.Chat\n\n[openvibe.chat](https://openvibe.chat) · [repository](https://github.com/OpenVibers/OpenVibe.Chat)\n\n- Chat: README drops CHAT_AUTHORITY (retired in Live, C-01) (#71) ([`e9d5bc5`](https://github.com/OpenVibers/OpenVibe.Chat/commit/e9d5bc57443b6849bf359eb6336c2c822844dd9d))\n- Chat: Live's legacy token cookie authenticates nothing (C-05) (#72) ([`cf3b116`](https://github.com/OpenVibers/OpenVibe.Chat/commit/cf3b1164d13e06216c08467959746c2af3997e84))\n- openvibe-shared v4.0.0 (was v3.0.1) (#73) ([`bc800b3`](https://github.com/OpenVibers/OpenVibe.Chat/commit/bc800b387f0e0248b71b5113bac9bf652518cd2c))\n\n## OpenVibe.Media\n\n[openvibe.media](https://openvibe.media) · [repository](https://github.com/OpenVibers/OpenVibe.Media)\n\n- Media: no app-key seeding; every first-party tenant is token-only (C-71) (#86) ([`4d5bd72`](https://github.com/OpenVibers/OpenVibe.Media/commit/4d5bd7289955eb260a3ccf823e5dd898396c61f8))\n- Media: no per-app webhooks; outcomes are OpenVibe.Events events only (C-75) (#87) ([`bdfd5d8`](https://github.com/OpenVibers/OpenVibe.Media/commit/bdfd5d845f63379b5367bb827223e823e03ac638))\n- Media: the frozen paste tables are dropped (contract after 0001); getAppStats carries no paste keys (#89) ([`c5b2ca3`](https://github.com/OpenVibers/OpenVibe.Media/commit/c5b2ca3cfcc8439fa18aabe04826b73b8e62db7c))\n\n## OpenVibe.Network\n\n[openvibe.network](https://openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Network)\n\n- Network: the streamer-pastes proxy comment describes the Community chain (#144) ([`076f8db`](https://github.com/OpenVibers/OpenVibe.Network/commit/076f8db9704c1c74fbcfd517a38f37c89456c5c7))\n- Network: Inventory and MediaHub get Media grants on their own tenants (C-71) (#145) ([`90b8acb`](https://github.com/OpenVibers/OpenVibe.Network/commit/90b8acb6f9d5c3f6159210f857fed640ce7af30f))\n- nginx: openvibe.run leaves the parked domains (OpenVibe.Run serves it) (#146) ([`a9765a2`](https://github.com/OpenVibers/OpenVibe.Network/commit/a9765a2e3edc8fb95648e98fe905f0f69be8246a))\n\n## OpenRestream\n\n[openre.stream](https://openre.stream) · [repository](https://github.com/OpenVibers/OpenRestream)\n\n- OpenRestream: Media calls use the service token only; the tenant key and capability bridge go (C-42) (#54) ([`aedcb9b`](https://github.com/OpenVibers/OpenRestream/commit/aedcb9b3cea56cd07f2f8effe5649ec2a7f531ba))\n- README: the Live import reads Live's PostgreSQL, not a SQLite snapshot (#55) ([`44766d8`](https://github.com/OpenVibers/OpenRestream/commit/44766d831feecaf560fc9bea8897600a8637754d))\n- openvibe-shared v4.0.0 (was v3.0.1) (#56) ([`57e15dc`](https://github.com/OpenVibers/OpenRestream/commit/57e15dc9eb3671098dbf263beeec23b0a119183a))\n\n## OpenVibe.Actor\n\n[openvibe.actor](https://openvibe.actor) · [repository](https://github.com/OpenVibers/OpenVibe.Actor)\n\n- Actor home: its agent acts through Search and Tools; how answers are checked (#35) ([`161f44d`](https://github.com/OpenVibers/OpenVibe.Actor/commit/161f44db471d4683039d8f9a4246af289ad36fee))\n- openvibe-shared v4.0.0 (was v3.0.1) (#36) ([`9fe2dad`](https://github.com/OpenVibers/OpenVibe.Actor/commit/9fe2dadb5679d82d0fdeee96f258cea14aabeab9))\n\n## OpenVibe.AI\n\n[ai.openvibe.services](https://ai.openvibe.services) · [repository](https://github.com/OpenVibers/OpenVibe.AI)\n\n- AI: a MediaRef is a Media object id (fetched at /o/<id>); legacy refs are refused (C-24) (#54) ([`f9450ad`](https://github.com/OpenVibers/OpenVibe.AI/commit/f9450adf5c508729f1b034d6ec476b43542d1675))\n- openvibe-shared v4.0.0 (was v3.0.1) (#55) ([`ced9b34`](https://github.com/OpenVibers/OpenVibe.AI/commit/ced9b343547c939eed409de61aa7275ea050348a))\n\n## OpenVibe.Billing\n\n[billing.openvibe.network](https://billing.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Billing)\n\n- Billing: the Live importer reads Live's PostgreSQL; the cutover runbook follows (C-30) (#47) ([`59c8ced`](https://github.com/OpenVibers/OpenVibe.Billing/commit/59c8cedb38012a726714c4cc1f2f762269e0e869))\n- openvibe-shared v4.0.0 (was v3.0.1) (#48) ([`588c783`](https://github.com/OpenVibers/OpenVibe.Billing/commit/588c78379a7c9cf78449177a93be1475e6cf64a0))\n\n## OpenVibe.Games\n\n[openvibe.games](https://openvibe.games) · [repository](https://github.com/OpenVibers/OpenVibe.Games)\n\n- Games home: no coming-soon cards; the page shows the game that works (#41) ([`7de16c5`](https://github.com/OpenVibers/OpenVibe.Games/commit/7de16c53071f628876d991f7c25503a16f15e8af))\n- openvibe-shared v4.0.0 (was v3.0.1) (#42) ([`c7fc696`](https://github.com/OpenVibers/OpenVibe.Games/commit/c7fc69668d107372f6e09869c2abf396ee90c7f5))\n\n## OpenVibe.Inventory\n\n[inventory.openvibe.network](https://inventory.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Inventory)\n\n- Inventory: Workshop images reach Media with the service token; the app key goes (C-71) (#31) ([`9a56c24`](https://github.com/OpenVibers/OpenVibe.Inventory/commit/9a56c248349986a4a87c629b309279a596fcf86b))\n- openvibe-shared v4.0.0 (was v3.0.1) (#32) ([`a64ccdc`](https://github.com/OpenVibers/OpenVibe.Inventory/commit/a64ccdc8450f3efede77a2022a0c60ba0231f952))\n\n## OpenVibe.Codes\n\n[openvibe.codes](https://openvibe.codes) · [repository](https://github.com/OpenVibers/OpenVibe.Codes)\n\n- openvibe-shared v4.0.0 (was v3.0.1) (#53) ([`8ac570f`](https://github.com/OpenVibers/OpenVibe.Codes/commit/8ac570f061b9d23abc660b27019454e3c83825bb))\n\n## OpenVibe.Coupons\n\n[openvibe.coupons](https://openvibe.coupons) · [repository](https://github.com/OpenVibers/OpenVibe.Coupons)\n\n- openvibe-shared v4.0.0 (was v3.0.1) (#40) ([`afc7d4f`](https://github.com/OpenVibers/OpenVibe.Coupons/commit/afc7d4f1f3bb0b5d2b5280d596df470d7c2a018f))\n\n## OpenVibe.Deals\n\n[openvibe.deals](https://openvibe.deals) · [repository](https://github.com/OpenVibers/OpenVibe.Deals)\n\n- openvibe-shared v4.0.0 (was v3.0.1) (#41) ([`8bd0e7d`](https://github.com/OpenVibers/OpenVibe.Deals/commit/8bd0e7d76d094774fffc9fbf58437baebf3ad30b))\n\n## OpenVibe.Events\n\n[openvibe.events](https://openvibe.events) · [repository](https://github.com/OpenVibers/OpenVibe.Events)\n\n- openvibe-shared v4.0.0 (was v3.0.1) (#64) ([`457d55b`](https://github.com/OpenVibers/OpenVibe.Events/commit/457d55be39cf137247fb2229f9962ed015df8353))\n\n## OpenVibe.Food\n\n[openvibe.food](https://openvibe.food) · [repository](https://github.com/OpenVibers/OpenVibe.Food)\n\n- openvibe-shared v4.0.0 (was v3.0.1) (#23) ([`76588a1`](https://github.com/OpenVibers/OpenVibe.Food/commit/76588a1fea39ccf549d82046b314042f87c2c848))\n\n## OpenVibe.Help\n\n[openvibe.help](https://openvibe.help) · [repository](https://github.com/OpenVibers/OpenVibe.Help)\n\n- openvibe-shared v4.0.0 (was v3.0.1) (#25) ([`b668937`](https://github.com/OpenVibers/OpenVibe.Help/commit/b66893794f5596831d0c0ead64323b1aecf03d3b))\n\n## OpenVibe.MediaHub\n\n[openvibe.video](https://openvibe.video) · [repository](https://github.com/OpenVibers/OpenVibe.MediaHub)\n\n- MediaHub: Media calls use the service token; the app key goes (C-71) (#23) ([`a7a9df1`](https://github.com/OpenVibers/OpenVibe.MediaHub/commit/a7a9df17280a59e7deb4ac7032928d463aa94bb9))\n\n## OpenVibe.News\n\n[openvibe.news](https://openvibe.news) · [repository](https://github.com/OpenVibers/OpenVibe.News)\n\n- News: the story API returns the real indexability decision; docs match production ingest (#40) ([`9738ea7`](https://github.com/OpenVibers/OpenVibe.News/commit/9738ea746208843334a4c68be2b62670f83d8826))\n\n## OpenVibe.Quest\n\n[openvibe.quest](https://openvibe.quest) · [repository](https://github.com/OpenVibers/OpenVibe.Quest)\n\n- Quest home: badges now, OpenCoins once switched on; the eight sites it follows (#24) ([`c734db0`](https://github.com/OpenVibers/OpenVibe.Quest/commit/c734db0a986f86f6bbde3a9a3805e1b24850ca7d))\n\n## OpenVibe.Work\n\n[openvibe.work](https://openvibe.work) · [repository](https://github.com/OpenVibers/OpenVibe.Work)\n\n- Work: the tagline says what it does today (find work on open job boards) (#23) ([`50799cd`](https://github.com/OpenVibers/OpenVibe.Work/commit/50799cd55f698534c17c64389b34ad3a0b41224a))\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-10-11T22:10:48.432Z","revised_at":"2026-10-11T22:10:48.422Z","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","bot","community","watch","chat","media","network","openre","actor","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":[]}}