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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- Patch notes: the day ends each title ('Patch notes: 80 changes across 36 sites' was three different posts' title) (#65) (
8d08c2d)
OpenVibe.Food
- 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
- 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
- Phone 320px: the quest grid's 320px minimum column no longer overflows a 320px screen (minmax(min(320px, 100%), 1fr)) (#63) (
efa09f3)
OpenVibe.Rent
- 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
- 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
- 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
- Phone 320px: the header search form can shrink (min-width 0), it overflowed a 320px screen by 33px (#77) (
5547bb9)
OpenVibe.Work
- 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.