Patch notes: 80 changes across 29 sites (Oct 17)

Imported. Imported from Commit messages from the OpenVibers repositories on GitHub; originally by OpenVibers.

What shipped on OpenVibe on 2026-10-17: 80 changes to OpenVibe.Live, OpenVibe.Host, OpenVibe.Media, OpenVibe.MediaHub, OpenVibe.Network, OpenVibe.Billing and 23 more. Every line below is a commit message from the OpenVibers repositories, linked to the change itself.

OpenVibe.Live

openvibe.live · repository

  • Home money counts: billing-stats reads Billing through the client's api object (the module root has no stats(); the home showed the tiles empty) (#186) (64d2cc0)
  • Thumbnails: Media's job failing (5xx) is 'no picture yet' (200, remembered 5 min), not Media's 500 in every visitor's console; Donate window skips the balance while signed out (a 401 in the console) (#187) (77d6446)
  • Home stats: an expired snapshot is answered at once and recomputed behind it, one recompute for everyone (the hero's p95 was 1 s: whoever came after each 30 s expiry waited for the COUNTs) (#189) (343708d)
  • Channel weather: an expired forecast is answered at once and refreshed behind it (p95 was 2.4 s), one shared refresh, 5 s timeouts, error answers never cached, unknown zips remembered (#188) (2ac32f7)
  • Channel: the offline header shows the streamer's picture in a circle (it only ever got the first letter, unstyled); one DOM helper for both headers (#190) (382cde0)
  • Phone chat buttons: the DM label no longer ends off-screen (button at 20px like Global's), and the Global chat button says Global, not G (#191) (0727cb4)
  • Channels: a name nobody has shows 'No channel called @name' at that address (it flashed a toast and dropped the visitor on the home page while the server said 404) (#192) (053060c)
  • VODs, clips and old stream links that are gone say so at their address (they flashed a toast and dropped the visitor on a list while the server said 404) (#193) (22a7c49)
  • Browser smoke: a channel nobody has must show the not-found page; CHANNEL names a real channel when BASE is production (#194) (3da9269)
  • Home hero: the AI copy rules live in one place (server/ai/hero-copy.js) and also refuse crude words, keyboard-mash names and viewer-count jokes ('testicle banter crew', 'qeqweqwe watchers', "goosely's loyal 3 viewers" were on the front… (eb0bc8f)
  • Channel 'Most watched': its three Media reads in parallel and the answer kept a minute per channel (p95 was 0.77 s, sequential reads on every offline channel view) (#196) (9f04773)
  • /live-notify.js: cached 5 minutes, then stale-while-revalidate (other sites load it at a fixed address on every page view; ~980 full downloads in 3 h at max-age=0) (#197) (a3e511c)
  • Thumbnails: an audio-only recording (Media's media.no_video) is asked about once a day, not hourly (three VODs cost Media a job an hour each) (#198) (09426db)
  • Not-found page: a long @name wraps (the full browser smoke saw /@no_such_channel_x9 overflow a 320px phone) (#199) (fce3696)
  • API docs: payments go through OpenVibe.Billing (the page still described Live's own orders and webhooks, removed at the cutover) (#200) (cb98635)
  • AI moments and auto clips: without an AI title, the stream's title and the time ('Fortnite! at 41:20'), not a frame caption's first words ('A Man With A Beard Is Speaking To') (#201) (c70583f)
  • Public AI text: no clothing, hair or face either; looks-titles fall back to stream title + time (#202) (681de23)

OpenVibe.Host

openvibe.host · repository

  • nginx: GET /auth/me on the API zone (it runs on every page load; the sign-in flow's 10/min showed a visitor opening a dozen pages as signed out, the browser check's 429s) (#124) (1b02baa)
  • nginx tenants: GET /auth/me on the API zone (the navbar's session read on every page load was held to the sign-in flow's 10/min) (#125) (626b04b)
  • deploy-proofs: socket handover for Network, Chat, the Tools gateway and Media (each answered every request through a restart) (#126) (fb35528)
  • Browser check: 320px wide by default too (six sites' home pages scrolled sideways on small phones without the check noticing) (#127) (c5f221b)
  • openvibe-sdk v0.51.1 (was v0.50.1) (#128) (9ac53ae)

OpenVibe.Media

openvibe.media · repository

  • Thumbnails: a virtual clip takes its picture from its VOD at the clip's start (clips 450, 453-456 failed generate_failed on every page view; a clip whose VOD is gone is media_unavailable, 404) (#136) (e9ceac2)
  • Zero-downtime restarts: systemd owns Media's listener (openvibe-media.socket); the process listens on fd 3 when handed it, as Live and Network (#137) (76fbc8f)
  • Readiness: virtual clips are not objects with no good copy (their bytes are their VOD's; five held /api/ready at degraded) (#138) (6b85ff4)
  • nginx: HSTS, nosniff and a referrer policy on openvibe.media (its pages sent no security headers) (#139) (ed5bef8)
  • Not found: an unknown /api path answers JSON ({ error: 'Not found' }), as Media's API routes do, not the HTML page (#140) (868ca8c)

OpenVibe.MediaHub

openvibe.video · repository

  • Video channel page: a name nobody has is a 404 (it was an empty 200 page linking to a Live channel that does not exist), and the header shows the person's picture over the letter (#89) (09245b6)
  • Phone 320px: list grids with a 290-420px minimum column use minmax(min(N, 100%), 1fr), so a single column fits a 320px screen (#90) (ab50343)
  • Video watch pages: the byline shows the streamer's or uploader's picture over the letter, as the channel page does since #89 (#91) (0ed3ca2)
  • Video host: an unknown /api path is a JSON 404 problem, not the HTML not-found page (#92) (c11d362)
  • Video watch pages: the page title names the channel and the day ('Fortnite!' titled twelve different recordings' pages) (#93) (d0bb4ae)

OpenVibe.Network

openvibe.network · repository

  • Zero-downtime restarts: systemd owns Network's listener (openvibe-network.socket); the process listens on fd 3 when handed it (each restart was ~7 s of 502s for every site's sign-in and navbar) (#267) (352fb81)
  • Boot: log each seed step that takes 250 ms or more (the seed is ~5.7 s of a 7 s boot, and a restart's queued requests wait for it) (#268) (1248580)
  • Boot: seed the identity legacy map with one INSERT … SELECT per source (the per-row loop over 28k guests was 6.4 s of every boot) (#269) (e633dfa)
  • CORS: first-party preflights are cached 10 minutes (Access-Control-Max-Age 600); the notification polls preflighted every 5 s, 22% of Network's requests (#270) (40c0806)
  • Phone 320px: the home hero's one-column grid is minmax(0, 1fr) (a 1fr column took its content's width and overflowed a 320px screen by 33px) (#271) (144634f)

OpenVibe.Billing

billing.openvibe.network · repository

  • Test: a delivery signed and wrapped as OpenVibe.Events sends it ({ event, seq }) reaches the account-data consumer through POST /internal/events (#80) (75d74a9)
  • stats: the comment said Live's imported Vibes count in bits_total; imports are 'import' transactions and count nowhere (#81) (058385b)
  • Phone 320px: list grids with a 290-420px minimum column use minmax(min(N, 100%), 1fr), so a single column fits a 320px screen (#82) (9574a28)

OpenVibe.Chat

openvibe.chat · repository

  • Zero-downtime restarts: systemd owns Chat's listener (openvibe-chat.socket); the process listens on fd 3 when handed it, as Live and Network (#114) (d78e1d4)
  • Chat: the IP-resolution diagnostic only with CHAT_LOG_IP_RESOLUTION=1 (it logged every connection's addresses: its 'first few' test never stopped) (#115) (81fdcf4)
  • openvibe.chat pages: a Content-Security-Policy with a per-response nonce (scripts only from the site, inline ones only with the nonce): Chat renders other people's words live and had none (#116) (14573f8)

OpenVibe.Games

openvibe.games · repository

  • Phone 320px: 'OpenVibe.Games' in the hero takes the width it fits in under 420px (at 42px it overflowed a 320px screen by 62px) (#97) (6271799)
  • gitleaks: the made-up session token's allowlist also covers its first-commit path (sqlite/sqliteStore.test.ts), so main's secrets scan is green again (#99) (c852268)
  • nginx: the repo vhost is production's again (www redirect, security.txt, /tos) plus /internal/ and /metrics closed at the edge and HSTS, nosniff and a referrer policy (#98) (96885a9)

OpenVibe.Reviews

openvibe.reviews · repository

  • nginx: GET /auth/me on the API zone (it runs on every page load; the sign-in flow's 10/min showed a visitor opening a dozen pages as signed out, the browser check's 429s) (#71) (a08cee1)
  • Phone 320px: the header search form can shrink (min-width 0), it overflowed a 320px screen by 33px (#72) (5eee6df)
  • GET /auth/me signed out answers 200 { user: null } like Blog, Community and Wiki (a 401 showed in every signed-out visitor's console) (#73) (17cca32)

OpenVibe.Tools

openvibe.tools · repository

  • Gateway zero-downtime restarts: systemd owns the listener (openvibe-tools.socket); the process listens on fd 3 when handed it, as Live and Network (#76) (4b97024)
  • Phone 320px: list grids with a 290-420px minimum column use minmax(min(N, 100%), 1fr), so a single column fits a 320px screen (#77) (528d61f)
  • GET /auth/me signed out answers 200 { user: null } like Blog, Community and Wiki (a 401 showed in every signed-out visitor's console) (#78) (0f2f698)

OpenVibe.Bot

openvibe.bot · repository

  • nginx: GET /auth/me on the API zone (it runs on every page load; the sign-in flow's 10/min showed a visitor opening a dozen pages as signed out, the browser check's 429s) (#136) (4190db8)
  • GET /auth/me signed out answers 200 { user: null } like Blog, Community and Wiki (a 401 showed in every signed-out visitor's console) (#137) (6f53fc4)

OpenVibe.Community

openvibe.community · repository

  • Phone 320px: list grids with a 290-420px minimum column use minmax(min(N, 100%), 1fr), so a single column fits a 320px screen (#92) (e28ad14)
  • Search: an untitled paste is named after its AI summary's first sentence or its first line (Search listed 'Untitled' as a result's title) (#93) (099e9b5)

OpenVibe.Coupons

openvibe.coupons · repository

  • nginx: GET /auth/me on the API zone (it runs on every page load; the sign-in flow's 10/min showed a visitor opening a dozen pages as signed out, the browser check's 429s) (#72) (67c7558)
  • openvibe-sdk v0.51.1 (was v0.50.1) (#73) (7c70c1a)

OpenVibe.Deals

openvibe.deals · repository

  • nginx: GET /auth/me on the API zone (it runs on every page load; the sign-in flow's 10/min showed a visitor opening a dozen pages as signed out, the browser check's 429s) (#69) (e8dbf05)
  • openvibe-sdk v0.51.1 (was v0.50.1) (#70) (28ae001)

OpenVibe.Help

openvibe.help · repository

  • Phone 320px: the questions grid's 320px minimum column no longer overflows a 320px screen (minmax(min(320px, 100%), 1fr)) (#63) (705081e)
  • Help: a site's page is titled 'Help with <site>' (OpenVibe.Search's page was titled 'Search', like Help's own search page) (#64) (b7e3291)

OpenVibe.News

openvibe.news · repository

  • nginx: GET /auth/me on the API zone (it runs on every page load; the sign-in flow's 10/min showed a visitor opening a dozen pages as signed out, the browser check's 429s) (#75) (685a20e)
  • openvibe-sdk v0.51.1 (was v0.50.1) (#76) (bdce1d4)

OpenVibe.Tips

openvibe.tips · repository

  • nginx: GET /auth/me on the API zone (it runs on every page load; the sign-in flow's 10/min showed a visitor opening a dozen pages as signed out, the browser check's 429s) (#68) (390abf1)
  • GET /auth/me signed out answers 200 { user: null } like Blog, Community and Wiki (a 401 showed in every signed-out visitor's console) (#69) (c64ab90)

OpenVibe.Trade

openvibe.trade · repository

  • nginx: GET /auth/me on the API zone (it runs on every page load; the sign-in flow's 10/min showed a visitor opening a dozen pages as signed out, the browser check's 429s) (#77) (2d1aaf7)
  • openvibe-sdk v0.51.1 (was v0.50.1) (#78) (ca5960e)

OpenVibe.VIP

openvibe.vip · repository

  • nginx: GET /auth/me on the API zone (it runs on every page load; the sign-in flow's 10/min showed a visitor opening a dozen pages as signed out, the browser check's 429s) (#70) (614b0e6)
  • GET /auth/me signed out answers 200 { user: null } like Blog, Community and Wiki (a 401 showed in every signed-out visitor's console) (#71) (9dbf790)

OpenVibe.AI

ai.openvibe.services · repository

  • live.hero.slogans: nothing crude or sexual and no keyboard-mash usernames on the front page ('testicle banter crew', 'qeqweqwe watchers' were written on 2026-10-17) (#118) (62709f8)

OpenVibe.Blog

openvibe.blog · repository

  • Patch notes: the day ends each title ('Patch notes: 80 changes across 36 sites' was three different posts' title) (#65) (8d08c2d)

OpenVibe.Food

openvibe.food · repository

  • Phone 320px: list grids with a 290-420px minimum column use minmax(min(N, 100%), 1fr), so a single column fits a 320px screen (#64) (a5ea8d9)

OpenRestream

openre.stream · repository

  • GET /auth/me signed out answers 200 { user: null } like Blog, Community and Wiki (a 401 showed in every signed-out visitor's console) (#86) (f1be993)

OpenVibe.Quest

openvibe.quest · repository

  • Phone 320px: the quest grid's 320px minimum column no longer overflows a 320px screen (minmax(min(320px, 100%), 1fr)) (#63) (efa09f3)

OpenVibe.Rent

openvibe.rent · repository

  • Phone 320px: list grids with a 290-420px minimum column use minmax(min(N, 100%), 1fr), so a single column fits a 320px screen (#75) (3b01950)

OpenVibe.Space

openvibe.space · repository

  • Phone 320px: list grids with a 290-420px minimum column use minmax(min(N, 100%), 1fr), so a single column fits a 320px screen (#70) (43d5835)

OpenVibe.Watch

openvibe.watch · repository

  • Phone 320px: list grids with a 290-420px minimum column use minmax(min(N, 100%), 1fr), so a single column fits a 320px screen (#78) (d251173)

OpenVibe.Wiki

openvibe.wiki · repository

  • Phone 320px: the header search form can shrink (min-width 0), it overflowed a 320px screen by 33px (#77) (5547bb9)

OpenVibe.Work

openvibe.work · repository

  • Phone 320px: list grids with a 290-420px minimum column use minmax(min(N, 100%), 1fr), so a single column fits a 320px screen (#53) (0a67ba6)

Patch 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.

Comments

Comments are hosted by OpenVibe.Community.

No comments yet.

Sign in with OpenVibe to comment.