{"id":"pst_01M4HX5J1NBXDMXAMJJ2C4HFAW","url":"https://openvibe.blog/@openvibe/patch-notes-86-changes-across-34-sites","blog":{"id":"blg_01M362MF0EDJ7QHQTRD8A3Q981","handle":"openvibe","title":"The OpenVibe blog","url":"https://openvibe.blog/"},"title":"Patch notes: 86 changes across 34 sites","summary":"What shipped on OpenVibe on 2026-10-10: 86 changes to OpenVibe.Bot, OpenVibe.Billing, OpenVibe.Codes, OpenVibe.Community, OpenVibe.Live, OpenVibe.Network and 28 more.","body_markdown":"What shipped on OpenVibe on 2026-10-10: 86 changes to OpenVibe.Bot, OpenVibe.Billing, OpenVibe.Codes, OpenVibe.Community, OpenVibe.Live, OpenVibe.Network and 28 more. Every line below is a commit message from the OpenVibers repositories, linked to the change itself.\n\n## OpenVibe.Bot\n\n[openvibe.bot](https://openvibe.bot) · [repository](https://github.com/OpenVibers/OpenVibe.Bot)\n\n- Bot: public driver and profile docs (/docs, /docs/drivers, /docs/profiles) with a profile validator (plan T15) (#52) ([`33420e3`](https://github.com/OpenVibers/OpenVibe.Bot/commit/33420e31a10abce921ab821663540525dadd88d4))\n- Bot: the Build docs live inside the OpenVibe Frame with a docs layout (sidebar, readable widths, theme colours) (#53) ([`b5ca8c4`](https://github.com/OpenVibers/OpenVibe.Bot/commit/b5ca8c4e5119c17cc2024d4acb7677ab23238678))\n- Bot: the Build pages use the Frame's font instead of the browser's serif (#54) ([`4b62217`](https://github.com/OpenVibers/OpenVibe.Bot/commit/4b62217c1af966d3c1102bce6b9ee5fc0f740e43))\n- Bot: nginx refuses /internal/ and /metrics case-insensitively (#55) ([`797928f`](https://github.com/OpenVibers/OpenVibe.Bot/commit/797928f96af5075c8181d32da7c3b240a84c4327))\n- openvibe-contracts v0.126.0 (was v0.122.1) (#56) ([`e1d7b7d`](https://github.com/OpenVibers/OpenVibe.Bot/commit/e1d7b7d817219f04c2988e76580c251d495a705d))\n- Bot: readable accent fills, and /favicon.ico is the app icon (#58) ([`0f0d57e`](https://github.com/OpenVibers/OpenVibe.Bot/commit/0f0d57e4132cf2c4343e49aa2f5f486d840d3bd1))\n- openvibe-shared v2.20.3 (was v2.20.0) (#57) ([`f6b01d4`](https://github.com/OpenVibers/OpenVibe.Bot/commit/f6b01d47687883996a51b0fc60164c508073fed0))\n\n## OpenVibe.Billing\n\n[billing.openvibe.network](https://billing.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Billing)\n\n- Billing: nginx refuses /internal/ and /metrics case-insensitively (#27) ([`1ff0909`](https://github.com/OpenVibers/OpenVibe.Billing/commit/1ff090930fb5027bd4dd6c91ff4b500240b09d26))\n- Billing: the vhost serves security.txt like the installed copy (#28) ([`eafa08a`](https://github.com/OpenVibers/OpenVibe.Billing/commit/eafa08a0f7a531417cf5f8a9ca3b69eb8794c060))\n- Billing: filled controls use the theme's readable accent pair (WCAG AA contrast) (#30) ([`459485f`](https://github.com/OpenVibers/OpenVibe.Billing/commit/459485fe28ad83de27fa12fe2314b6d9d56dbdfe))\n- openvibe-shared v2.20.3 (was v2.20.0) (#29) ([`e169b04`](https://github.com/OpenVibers/OpenVibe.Billing/commit/e169b0421d499a34346ee421dd0fe6ba644565ff))\n\n## OpenVibe.Codes\n\n[openvibe.codes](https://openvibe.codes) · [repository](https://github.com/OpenVibers/OpenVibe.Codes)\n\n- Codes: README sections and STATUS.json fields the docs-currency checker requires (#34) ([`14316b2`](https://github.com/OpenVibers/OpenVibe.Codes/commit/14316b2ea1ce62fdf6028f92131ebc1652cba9eb))\n- Codes: the API agent cannot read through symlinks, /auth/me is not rate-limited, every sign-out method is same-origin (#35) ([`dbdee25`](https://github.com/OpenVibers/OpenVibe.Codes/commit/dbdee25d4e573569260aa7dda1eb906273c21793))\n- Codes: the vhost serves security.txt like the installed copy (#36) ([`ff892d9`](https://github.com/OpenVibers/OpenVibe.Codes/commit/ff892d9ca9e87157fb12f24f006ce1efab4891e4))\n- Codes: nginx refuses /internal/ and /metrics case-insensitively (#37) ([`20dca5d`](https://github.com/OpenVibers/OpenVibe.Codes/commit/20dca5d1728b90e365673055dabb79f7a63c970e))\n\n## OpenVibe.Community\n\n[openvibe.community](https://openvibe.community) · [repository](https://github.com/OpenVibers/OpenVibe.Community)\n\n- Community: screenshots typed by their bytes, secret burn-after-read slugs, same-site /new, cross-site logout subresources refused (#36) ([`2b2b436`](https://github.com/OpenVibers/OpenVibe.Community/commit/2b2b43657f4b01fb36dbf6ac49a594826d9b199e))\n- Community: the vhost serves security.txt like the installed copy (#37) ([`58d1eaf`](https://github.com/OpenVibers/OpenVibe.Community/commit/58d1eaf2828eab349193731a8937308feede13d4))\n- Community: filled controls use the theme's readable accent pair (WCAG AA contrast) (#39) ([`00369a4`](https://github.com/OpenVibers/OpenVibe.Community/commit/00369a4becbbbdfd36fc6b9970648404473eee50))\n- openvibe-shared v2.20.3 (was v2.20.0) (#38) ([`fab37bd`](https://github.com/OpenVibers/OpenVibe.Community/commit/fab37bd83f2a0f3a9ee002a1f5fdcbc373d9fc62))\n\n## OpenVibe.Live\n\n[openvibe.live](https://openvibe.live) · [repository](https://github.com/OpenVibers/OpenVibe.Live)\n\n- Live: the vhost carries Chat's calls include like production, and refuses /metrics in any case (#67) ([`f5a0e0c`](https://github.com/OpenVibers/OpenVibe.Live/commit/f5a0e0c32c7f4817d6b3c20bc69ec747b18b5e1a))\n- Live: Media outcomes arrive only over OpenVibe.Events; the direct media webhook and its authority switch are deleted (#68) ([`d7fb500`](https://github.com/OpenVibers/OpenVibe.Live/commit/d7fb5009162872e48de6732deb2f48912e9bfdb6))\n- Live: filled controls use the theme's readable accent pair (WCAG AA contrast) (#70) ([`b405725`](https://github.com/OpenVibers/OpenVibe.Live/commit/b405725c11adc3a261f3976c3cea77e1313e08f1))\n- openvibe-shared v2.20.3 (was v2.20.0) (#69) ([`9afe677`](https://github.com/OpenVibers/OpenVibe.Live/commit/9afe67749842515c2be7da1c14e18a663627eaaa))\n\n## OpenVibe.Network\n\n[openvibe.network](https://openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Network)\n\n- Network: nginx refuses /internal/ and /metrics case-insensitively (#111) ([`c4a267a`](https://github.com/OpenVibers/OpenVibe.Network/commit/c4a267a938a7e8df71b13bd6799e8c7009e4401c))\n- Network: the internal API's loopback rule applies to every spelling of /internal/ (#112) ([`49fad0f`](https://github.com/OpenVibers/OpenVibe.Network/commit/49fad0f3c673f2bd508f8503640f82777e2b9656))\n- Network: filled controls use the theme's readable accent pair (WCAG AA contrast) (#114) ([`9baadc4`](https://github.com/OpenVibers/OpenVibe.Network/commit/9baadc4e1d0a70697ed35eea66a96e0832fd4ec1))\n- openvibe-shared v2.20.3 (was v2.20.0) (#113) ([`036b2dd`](https://github.com/OpenVibers/OpenVibe.Network/commit/036b2dd2fef03f66c7a976d4cb1d10369b54f454))\n\n## OpenVibe.Tools\n\n[openvibe.tools](https://openvibe.tools) · [repository](https://github.com/OpenVibers/OpenVibe.Tools)\n\n- Tools: an audio job's format can no longer write outside the temp directory; the gateway refuses backslashes in next (#29) ([`b9b5b2e`](https://github.com/OpenVibers/OpenVibe.Tools/commit/b9b5b2e420e0ad737f18059f58e75ebc7fac7fc8))\n- Tools: OSM data is escaped in maps/food, X-OV-* only from the gateway, bounded webhook bins, yt info throttled, no raw error text (#30) ([`7f1bbfb`](https://github.com/OpenVibers/OpenVibe.Tools/commit/7f1bbfbc91119c9d68d11e5c58274e6f9055576f))\n- Tools: filled controls use the theme's readable accent pair (WCAG AA contrast) (#32) ([`2f32882`](https://github.com/OpenVibers/OpenVibe.Tools/commit/2f3288213ccba63e6a866779837026f95370b910))\n- openvibe-shared v2.20.3 (was v2.20.0) (#31) ([`99c04c4`](https://github.com/OpenVibers/OpenVibe.Tools/commit/99c04c489aee899af0a937356e7903f200212110))\n\n## OpenVibe.Watch\n\n[openvibe.watch](https://openvibe.watch) · [repository](https://github.com/OpenVibers/OpenVibe.Watch)\n\n- Watch: user regexes cannot hang the process (validated at save, 50 ms deadline per match); API obeys the cadence floor and a per-owner cap (#14) ([`9c4dcb1`](https://github.com/OpenVibers/OpenVibe.Watch/commit/9c4dcb157ea2cb9e7efc67e9867029b1d8c59115))\n- Watch: README sections and STATUS.json fields the docs-currency checker requires (#15) ([`144eae5`](https://github.com/OpenVibers/OpenVibe.Watch/commit/144eae542f57c6b75618a83ae77da5185ac1c365))\n- Watch: filled controls use the theme's readable accent pair (WCAG AA contrast) (#17) ([`889e741`](https://github.com/OpenVibers/OpenVibe.Watch/commit/889e7419d72daaae0fe7a2dc224a930f07f05c04))\n- openvibe-shared v2.20.3 (was v2.20.0) (#16) ([`a1ccaca`](https://github.com/OpenVibers/OpenVibe.Watch/commit/a1ccacace63ea72eebf48dcb4325fe59539efa62))\n\n## OpenVibe.Media\n\n[openvibe.media](https://openvibe.media) · [repository](https://github.com/OpenVibers/OpenVibe.Media)\n\n- openvibe-contracts v0.126.0 (was v0.122.1) (#61) ([`2a806e9`](https://github.com/OpenVibers/OpenVibe.Media/commit/2a806e9933edf97f8bfcf11c4ba420385cc88c2e))\n- Media: app assets people uploaded never run as a page (inline only for images, audio, video; nosniff, sandbox CSP); thumbnail ids cannot name a path (#62) ([`6bed1da`](https://github.com/OpenVibers/OpenVibe.Media/commit/6bed1daa8760f06a1f84db016a03ba849ab62bd3))\n- Media: nginx refuses /internal/ and /metrics case-insensitively (#63) ([`26849ad`](https://github.com/OpenVibers/OpenVibe.Media/commit/26849ad3fc465717bff3cfe786133969de7a0398))\n\n## OpenVibe.News\n\n[openvibe.news](https://openvibe.news) · [repository](https://github.com/OpenVibers/OpenVibe.News)\n\n- openvibe-contracts v0.126.0 (was v0.122.1) (#24) ([`05d3102`](https://github.com/OpenVibers/OpenVibe.News/commit/05d3102fa3459609a33c47164efd088ba06c28ce))\n- News: filled controls use the theme's readable accent pair (WCAG AA contrast) (#26) ([`b9261ad`](https://github.com/OpenVibers/OpenVibe.News/commit/b9261ad42d63494e61a9452e3ed28a1f0a9f17af))\n- openvibe-shared v2.20.3 (was v2.20.0) (#25) ([`ce77a9b`](https://github.com/OpenVibers/OpenVibe.News/commit/ce77a9bf22ec985b0ee8b62572d4dbcb8c1dc516))\n\n## OpenRestream\n\n[openre.stream](https://openre.stream) · [repository](https://github.com/OpenVibers/OpenRestream)\n\n- OpenRestream: nginx refuses /internal/ and /metrics case-insensitively (#32) ([`fe31447`](https://github.com/OpenVibers/OpenRestream/commit/fe314476ff2917dcc23ff0a8c4fdf5d38230ad16))\n- OpenRestream: readable fills (theme accent pair, darker danger/failed), and its button base rule no longer overrides the shipped widget (#34) ([`4881332`](https://github.com/OpenVibers/OpenRestream/commit/4881332a9aa48ae9470b64eef4402a88aba6de62))\n- openvibe-shared v2.20.3 (was v2.20.2) (#33) ([`848bc1a`](https://github.com/OpenVibers/OpenRestream/commit/848bc1a04142f7bf057f8ffca783b469dec28fcd))\n\n## OpenVibe.Sources\n\n[sources.openvibe.network](https://sources.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Sources)\n\n- Sources: nginx refuses /internal/ and /metrics case-insensitively (#16) ([`160a5e6`](https://github.com/OpenVibers/OpenVibe.Sources/commit/160a5e65c01d69d218963aa1141c865e865501c4))\n- Sources: the vhost serves security.txt like the installed copy (#17) ([`196405b`](https://github.com/OpenVibers/OpenVibe.Sources/commit/196405b005191cbd416742aa5d44593693b296cf))\n- Sources: five more sources seeded disabled (GOV.UK, EU press corner, NOAA, Frankfurter, ECB) with their terms and robots notes (#18) ([`9a74b68`](https://github.com/OpenVibers/OpenVibe.Sources/commit/9a74b68759f3415d734de891d6574dad2b6fb3bb))\n\n## OpenVibe.Space\n\n[openvibe.space](https://openvibe.space) · [repository](https://github.com/OpenVibers/OpenVibe.Space)\n\n- Space: README sections and STATUS.json fields the docs-currency checker requires (#14) ([`3342a02`](https://github.com/OpenVibers/OpenVibe.Space/commit/3342a02df4628c7939107fed3a280edaeccfa63d))\n- Space: nginx refuses /internal/ and /metrics case-insensitively (#15) ([`28129a3`](https://github.com/OpenVibers/OpenVibe.Space/commit/28129a39ed6646b1901f50f51433d1228f321adc))\n- Space: the home page is built from the network's showcase sections, in the Frame's font ([`6916fe7`](https://github.com/OpenVibers/OpenVibe.Space/commit/6916fe7f16045a7ef099f5ae3b717abee8b5307c))\n\n## OpenVibe.Trade\n\n[openvibe.trade](https://openvibe.trade) · [repository](https://github.com/OpenVibers/OpenVibe.Trade)\n\n- openvibe-contracts v0.126.0 (was v0.122.1) (#27) ([`0685c5f`](https://github.com/OpenVibers/OpenVibe.Trade/commit/0685c5f7511aaefc5d76a8f050714b5625960030))\n- Trade: filled controls use the theme's readable accent pair (WCAG AA contrast) (#29) ([`c3e63eb`](https://github.com/OpenVibers/OpenVibe.Trade/commit/c3e63eb1e4a48386e7acf5fa241620b8fb87df26))\n- openvibe-shared v2.20.3 (was v2.20.0) (#28) ([`19280d5`](https://github.com/OpenVibers/OpenVibe.Trade/commit/19280d563c2a92c3940c3d5ba6db49e6eb8ac857))\n\n## OpenVibe.AI\n\n[ai.openvibe.services](https://ai.openvibe.services) · [repository](https://github.com/OpenVibers/OpenVibe.AI)\n\n- AI: nginx refuses /internal/ and /metrics case-insensitively (#36) ([`c37a3eb`](https://github.com/OpenVibers/OpenVibe.AI/commit/c37a3eb8cd5c340ee98b50902451c9ca69a449c5))\n- AI: filled controls use the theme's readable accent pair (WCAG AA contrast) (#38) ([`c8ebd03`](https://github.com/OpenVibers/OpenVibe.AI/commit/c8ebd039286e86b50aacbdf6e765441e224453c0))\n\n## OpenVibe.Blog\n\n[openvibe.blog](https://openvibe.blog) · [repository](https://github.com/OpenVibers/OpenVibe.Blog)\n\n- Blog: listings show only posts the viewer may open, batched sitemap reviews, bounded paging, case-insensitive nginx guards (#20) ([`dc29239`](https://github.com/OpenVibers/OpenVibe.Blog/commit/dc292395af8175171522acdf42de2070af1e6fa7))\n- Blog: the vhost serves security.txt like the installed copy (#21) ([`74d0819`](https://github.com/OpenVibers/OpenVibe.Blog/commit/74d081987e13c1c8688844ff9c86c67224694202))\n\n## OpenVibe.Deals\n\n[openvibe.deals](https://openvibe.deals) · [repository](https://github.com/OpenVibers/OpenVibe.Deals)\n\n- Deals: filled controls use the theme's readable accent pair (WCAG AA contrast) (#27) ([`1421cd7`](https://github.com/OpenVibers/OpenVibe.Deals/commit/1421cd7971adf41c7696a790cef899c24aa2f8c0))\n- openvibe-shared v2.20.3 (was v2.20.0) (#26) ([`c5200c0`](https://github.com/OpenVibers/OpenVibe.Deals/commit/c5200c0136151be4f3058ee394666b971d90a21f))\n\n## OpenVibe.Help\n\n[openvibe.help](https://openvibe.help) · [repository](https://github.com/OpenVibers/OpenVibe.Help)\n\n- Help: README sections and STATUS.json fields the docs-currency checker requires (#7) ([`aea9ac7`](https://github.com/OpenVibers/OpenVibe.Help/commit/aea9ac72e9835693e0e0edd6b10f74add251ebf5))\n- Help: nginx refuses /internal/ and /metrics case-insensitively (#8) ([`8b802ca`](https://github.com/OpenVibers/OpenVibe.Help/commit/8b802cab1b1450621e9a1eb619ba454d4babbf11))\n\n## OpenVibe.Host\n\n[openvibe.host](https://openvibe.host) · [repository](https://github.com/OpenVibers/OpenVibe.Host)\n\n- Host: the vhost serves security.txt like the installed copy (#46) ([`3d0e531`](https://github.com/OpenVibers/OpenVibe.Host/commit/3d0e531fae0420517fece9a337f0eec146bbe2a4))\n- Host: public hosting waits for its launch switch (HOST_PUBLIC_HOSTING, off): staff-only projects and an honest front page until then (#47) ([`873a5f0`](https://github.com/OpenVibers/OpenVibe.Host/commit/873a5f02168935b43a5573f7196cdf216d9913de))\n\n## OpenVibe.Inventory\n\n[inventory.openvibe.network](https://inventory.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Inventory)\n\n- Inventory: nginx refuses /internal/ and /metrics case-insensitively (#14) ([`ed542e1`](https://github.com/OpenVibers/OpenVibe.Inventory/commit/ed542e14667c7c9852cf48ed8ce63c692eab8852))\n- Inventory: README sections and STATUS.json fields the docs-currency checker requires (#13) ([`4265497`](https://github.com/OpenVibers/OpenVibe.Inventory/commit/426549732b953593438ee2bae0fc607831054025))\n\n## OpenVibe.MediaHub\n\n[openvibe.video](https://openvibe.video) · [repository](https://github.com/OpenVibers/OpenVibe.MediaHub)\n\n- MediaHub: nginx refuses /internal/ and /metrics case-insensitively (#7) ([`3dac7f3`](https://github.com/OpenVibers/OpenVibe.MediaHub/commit/3dac7f3794142062ab1fce503c72b62f7ea5ff45))\n- MediaHub: README sections and STATUS.json fields the docs-currency checker requires (#6) ([`343e931`](https://github.com/OpenVibers/OpenVibe.MediaHub/commit/343e931558d7bdc7f1d5b527617d39ce83010012))\n\n## OpenVibe.Quest\n\n[openvibe.quest](https://openvibe.quest) · [repository](https://github.com/OpenVibers/OpenVibe.Quest)\n\n- Quest: nginx refuses /internal/ and /metrics case-insensitively (#7) ([`65cb328`](https://github.com/OpenVibers/OpenVibe.Quest/commit/65cb32870b8eb65dacce685edfa3841aeb769e2b))\n- Quest: README sections and STATUS.json fields the docs-currency checker requires (#6) ([`6ee9198`](https://github.com/OpenVibers/OpenVibe.Quest/commit/6ee9198b34ebf375750352aed166688e160b36f7))\n\n## OpenVibe.Rent\n\n[openvibe.rent](https://openvibe.rent) · [repository](https://github.com/OpenVibers/OpenVibe.Rent)\n\n- Rent: a crafted sign-in state can no longer crash the process; /internal/ and /metrics refused case-insensitively (#5) ([`9abd708`](https://github.com/OpenVibers/OpenVibe.Rent/commit/9abd7086e7e454bbdc9384c9f2a8c6f8683119b1))\n- Rent: README sections and STATUS.json fields the docs-currency checker requires (#6) ([`7ad3f28`](https://github.com/OpenVibers/OpenVibe.Rent/commit/7ad3f28259e6a9046019c171fee5a3b56a47c190))\n\n## OpenVibe.Search\n\n[search.openvibe.network](https://search.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Search)\n\n- Search: the vhost serves security.txt like the installed copy (#24) ([`5df01b7`](https://github.com/OpenVibers/OpenVibe.Search/commit/5df01b71cf536391c7852cc5eaea93b681c7bf26))\n- Search: nginx refuses /internal/ and /metrics case-insensitively (#25) ([`ab0100b`](https://github.com/OpenVibers/OpenVibe.Search/commit/ab0100b793c9590c2d9e21d10600e55fbaa28fe1))\n\n## OpenVibe.VIP\n\n[openvibe.vip](https://openvibe.vip) · [repository](https://github.com/OpenVibers/OpenVibe.VIP)\n\n- VIP: filled controls use the theme's readable accent pair (WCAG AA contrast) (#25) ([`8ad35f6`](https://github.com/OpenVibers/OpenVibe.VIP/commit/8ad35f628767b3e113c8d213e2397ba9032be472))\n- openvibe-shared v2.20.3 (was v2.20.0) (#24) ([`218ae79`](https://github.com/OpenVibers/OpenVibe.VIP/commit/218ae7904d2b5bf80cb855d4281ef7a3bf792c9e))\n\n## OpenVibe.Wiki\n\n[openvibe.wiki](https://openvibe.wiki) · [repository](https://github.com/OpenVibers/OpenVibe.Wiki)\n\n- Wiki: the vhost serves security.txt like the installed copy (#23) ([`b657f70`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/b657f705d8c6dafe66e3adc303a5f6daebbc1587))\n- Wiki: nginx refuses /internal/ and /metrics case-insensitively (#24) ([`0e56340`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/0e56340c8e6f37651338b9cb2dbd2f95f72d591f))\n\n## OpenVibe.Work\n\n[openvibe.work](https://openvibe.work) · [repository](https://github.com/OpenVibers/OpenVibe.Work)\n\n- Work: nginx refuses /internal/ and /metrics case-insensitively (#6) ([`38adfa9`](https://github.com/OpenVibers/OpenVibe.Work/commit/38adfa994312f6bd3301c818f5973d67893b128c))\n- Work: README sections and STATUS.json fields the docs-currency checker requires (#5) ([`25c6c06`](https://github.com/OpenVibers/OpenVibe.Work/commit/25c6c0679e4fb1612659b843712989af0a7c2bdc))\n\n## OpenVibe.Actor\n\n[openvibe.actor](https://openvibe.actor) · [repository](https://github.com/OpenVibers/OpenVibe.Actor)\n\n- Actor: nginx refuses /internal/ and /metrics case-insensitively (#11) ([`f7b5ea1`](https://github.com/OpenVibers/OpenVibe.Actor/commit/f7b5ea149f4e436890e69c64e4660ff6bef0f754))\n\n## OpenVibe.Chat\n\n[openvibe.chat](https://openvibe.chat) · [repository](https://github.com/OpenVibers/OpenVibe.Chat)\n\n- Chat: nginx refuses /internal/ and /metrics case-insensitively (#44) ([`791957a`](https://github.com/OpenVibers/OpenVibe.Chat/commit/791957ad57f8556bde805982febb15724132bf46))\n\n## OpenVibe.Coupons\n\n[openvibe.coupons](https://openvibe.coupons) · [repository](https://github.com/OpenVibers/OpenVibe.Coupons)\n\n- openvibe-contracts v0.126.0 (was v0.122.1) (#25) ([`4940a17`](https://github.com/OpenVibers/OpenVibe.Coupons/commit/4940a1745f225a20e8a417e50132b08c9c3d1085))\n\n## OpenVibe.Events\n\n[openvibe.events](https://openvibe.events) · [repository](https://github.com/OpenVibers/OpenVibe.Events)\n\n- Events: nginx refuses /internal/ and /metrics case-insensitively (#36) ([`4a2e71f`](https://github.com/OpenVibers/OpenVibe.Events/commit/4a2e71f13bab12fdac0f05442bc99949f952e26d))\n\n## OpenVibe.Food\n\n[openvibe.food](https://openvibe.food) · [repository](https://github.com/OpenVibers/OpenVibe.Food)\n\n- Food: nginx refuses /internal/ and /metrics case-insensitively (#7) ([`1159350`](https://github.com/OpenVibers/OpenVibe.Food/commit/11593503fe236bc0a742d166fa89b31292e70aef))\n\n## OpenVibe.Reviews\n\n[openvibe.reviews](https://openvibe.reviews) · [repository](https://github.com/OpenVibers/OpenVibe.Reviews)\n\n- openvibe-contracts v0.126.0 (was v0.122.1) (#25) ([`79a664e`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/79a664eddb385b8b21c6bf7688964624efbaf869))\n\n## OpenVibe.Services\n\n[openvibe.services](https://openvibe.services) · [repository](https://github.com/OpenVibers/OpenVibe.Services)\n\n- Services: nginx refuses /internal/ and /metrics case-insensitively (#17) ([`da2356d`](https://github.com/OpenVibers/OpenVibe.Services/commit/da2356d562b94654fd14b1225c96012c90a050d5))\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-10T03:19:38.822Z","revised_at":"2026-10-10T03:19:38.810Z","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","bot","billing","codes","community","live","network","tools","watch","media","news"],"categories":[],"series":{"title":"Patch notes","url":"https://openvibe.blog/@openvibe/series/patch-notes","position":null},"media":[],"citations":[],"indexability":{"indexable":true,"robots":"index, follow","reasons":[]}}