Skip to content
-
AI Moments thumbnails use the paste's real image URL (Community's create answer has none, so the job reads the paste back; Media's /p/<slug>/screenshot never knew Community pastes, so every moment since the move showed a broken image); deploy cards fold only when nobody has spoken in any room since, within 3 hoursOpenVibers · 23 Sept 2026
047f2064
-
openvibe-contracts v0.30.2 (live.follower.read is registered)OpenVibers · 23 Sept 2026
5595de01
-
GET /internal/followers for Network's live.stream.started consumer (service token live.follower.read, loopback, paged); chat shows the VIP member badge from OpenVibe.Chat (on the message, in history metadata, or a later chat_vip_badge frame), as text, replacing Live's own subscriber starOpenVibers · 23 Sept 2026
456eccd9
-
Live consumes Media's outcomes from OpenVibe.Events: POST /internal/media-events takes Live's subscriptions to media.vod.*, media.clip.* and media.storage.* (MEDIA_EVENTS_SECRET, signature v2 only via openvibe-sdk parseDelivery requireV2), Live's tenant only (MEDIA_APP_ID), media.object.uploaded ignored. What Live does with an outcome moved to server/media-proxy/outcomes.js, shared with the direct webhook, and each outcome is applied once whichever copy arrives first: an inbox receipt (consumer live-media-outcomes, key media:<object type>:<object id>:<event id>, Media puts the event id in the webhook body since cbf8410) in the same transaction as Live's writes; recorder/AI/ops-alert side effects run after the commit for the winning copy only. MEDIA_EVENTS_AUTHORITY=webhook (default) | both | events picks the path that acts; under events a webhook with an event_id is acknowledged and dropped, one without still acts. scripts/subscribe-media-events.js creates, lists (--dry-run), disables and re-enables the three subscriptions as Live. docs/architecture.md: the events Live produces and consumes, the transition and the webhook removal steps. Tests: test/media-events.test.js (both paths, each authority, duplicates both ways, tenant/source filters, v2 signatures), test/subscribe-media-events.test.jsOpenVibers · 23 Sept 2026
d2715e5f
-
Deploys are announced as OpenVibe.Events events: the deploy notice queues live.release.deployed (subject release <head sha>; payload service, release, commit, previous, commit_count, commits[] up to 40, deployed_at, notes_url; visibility internal) through Live's outbox in the SAME transaction that records the commits as announced and, with local chat, stores the rolling chat row, so there is never a notice without its event or the other way round; the chat notice itself is unchanged (local row, or OpenVibe.Chat over the bridge). stream-events.js exposes enqueue()/kick() so Live's other events share the one outbox. openvibe-contracts v0.29.0 → v0.30.1 (no contract for this type yet: a live.* contract addition). test/release-events.test.js: envelope valid against event-envelope@1, published, silent without new code, rolled back when the outbox insert fails, bridge path keptOpenVibers · 23 Sept 2026
e73a92d0
-
Security: the hardware-bridge example carried a real stream key (since the initial release; rotated 2026-09-23, it matches nothing now); it has a placeholder, and gitleaks allows only that old commit's copyOpenVibers · 23 Sept 2026
41ffd209
-
CI: run the shared security workflow (gitleaks secret scan + dependency audit, Track Q)OpenVibers · 23 Sept 2026
498b1884
-
VOD and clip comments are OpenVibe.Community threads (Wave 5 exit: Live and a second product share one thread)OpenVibers · 23 Sept 2026
b8afb713
-
Retire POST /internal/ai/site-copy: the Network's footer copy comes from OpenVibe.AI only (Network 31b234a), so nothing calls itOpenVibers · 23 Sept 2026
0a115f65
-
Private VODs and clips are missing to everyone but their owners and staff: GET /api/vods/:id answered anonymous callers with a stub carrying a private VOD's title, username and avatar; now the same 404 and body as an unknown id. One rule in server/media-proxy/access.js (private = visibility 'private', or a legacy row with no visibility and is_public 0; owners = uploader/clipper, clipped channel, stream's streamer; staff = admin/global_mod), fetched with the app's authority, applied to VOD detail, live-info, memories, context, the live-recording lookup, publish/edit/delete, clipping a VOD, clip detail and clip writes, thumbnail regeneration and comments (403s that confirmed a private id become the missing-id 404). Also closed: /api/chat-ai/vod-transcripts returned any VOD's transcript and overview, the server-rendered /vod/:id and /clip/:id pages put a private item's title, overview and transcript into shared HTML, /api/streams/recent carried a private legacy VOD's id and thumbnail (frozen vods table, read-only query change), and the stream transcript's legacy fallback could name a private VOD. test/media-privacy.test.js compares every refused answer with the missing-id answerOpenVibers · 23 Sept 2026
31695a6f
-
Live listens on 127.0.0.1:3000 only (0.0.0.0 answered on the public IP, past Cloudflare and nginx); WHIP is advertised on whip.openvibe.live behind Cloudflare and RTMP on DNS-only ingest.openvibe.live (the registry had RTMP on openvibe.live, which Cloudflare does not carry); drop the announced-IP-vs-WHIP-host warningOpenVibers · 23 Sept 2026
047f895f
-
Frozen legacy tables: drop the ten uncalled write helpers for vods/clips/pastes/paste_likes and add test/frozen-tables.test.js, which fails if server code writes them again (Wave 22 register C-73 step 1)OpenVibers · 23 Sept 2026
f936ab3c
-
Remove the hard-coded legacy quest secret: /api/cosmetics/internal-unlock takes only INTERNAL_API_KEY, and the quest game-item bridge is off unless LEGACY_QUEST_API_URL is set (the game no longer runs); drop the unused admin route that wrote the frozen pastes table (Wave 22 register C-59, C-73)OpenVibers · 23 Sept 2026
e505868b
-
OpenRe mirror requires Events signature v2 (replay window); openvibe-sdk v0.4.0OpenVibers · 23 Sept 2026
ae075531
-
Remove the superseded navbar: Live's own menu toggles, dropdown/overflow/drawer helpers, the auth-state writes to markup that no longer exists and 138 CSS rules for it (the shared navbar has replaced all of it since 2026-09-18); -22 KB style.cssOpenVibers · 23 Sept 2026
1324429e
-
Chat bans: a null stream id is site-wide and global staff only — offline channel-room /ban, /timeout, /unban are scoped to the channel's stream, a channel /unban never lifts a site-wide row, and /internal/chat-effects/ban re-checks both; nginx: client address headers only from $remote_addr (realip), never appended to or passed through from the clientOpenVibers · 23 Sept 2026
8609fb11
-
Analytics within ADR-021: no IP, user id or city in raw events; route templates, referer origins and user-agent classes; rotating session ids; raw events pruned after 30 days (nightly job, bounded batches), rollups keptOpenVibers · 23 Sept 2026
0e07aec7
-
Security: a PowerChat checkout ref (pcorder/pcsub/pcdon) only counts on the account its checkout routes to — a streamer tipping their own PowerChat with a crafted ref minted cashout Vibes; FedCM assertions and service/app tokens are refused as Live sessionsOpenVibers · 23 Sept 2026
ce601e14
-
AI through OpenVibe.AI (Wave 13): with AI_SERVICE=remote, llm.complete and the translation, paste/frame, overview, media, recap and site-copy call sites run OpenVibe.AI workflows (service token, audience openvibe.ai); unset = unchanged; openvibe-contracts v0.29.0OpenVibers · 23 Sept 2026
fa22de52
-
OpenRe.Stream integration (Wave 7): per-slot ingest_authority switch (default live: no behaviour change), OpenRe keys/ingest URL on Go Live, session mirror from openre.session.* events; inert until OPENRE_URL is set; openvibe-contracts v0.16.0OpenVibers · 23 Sept 2026
f0ca18bd
-
POST /internal/tips/deliveries: OpenVibe.Tips announces settled tips in the creator's chat (service token, live.tips_delivery.write); openvibe-contracts v0.15.0OpenVibers · 23 Sept 2026
f11f8097
-
payments: use the module's crypto importOpenVibers · 23 Sept 2026
42e3fdd2
-
CCBill webhook secret compared in constant timeOpenVibers · 23 Sept 2026
a424699b
-
Billing client behind BILLING_AUTHORITY (default live: no behaviour change); owner-controlled money freeze; tripwire on Live's money columns under billing (Wave 8 cutover preparation)OpenVibers · 23 Sept 2026
c3847871
-
nginx: /metrics is never proxied (404); deploy docs for metrics and readinessOpenVibers · 23 Sept 2026
6a68b92d
-
Observability (Track O): loopback-only /metrics with golden signals by route template and live gauges (streams, sockets per server, outbox); truthful /api/ready (db required; SFU, Media, Network optional → degraded); openvibe-shared v1.3.0OpenVibers · 23 Sept 2026
6090d00b
-
nginx: include OpenVibe.Chat's chat locations (Wave 6 cutover, 2026-09-23 02:03 UTC)OpenVibers · 23 Sept 2026
9f4f1da1
-
Chat extraction, Live side (Wave 6): service-token internal routes for OpenVibe.Chat (chat context, effects, mirror), CHAT_AUTHORITY=chat hands chat to OpenVibe.Chat (off by default: no behaviour change); openvibe-contracts v0.13.0OpenVibers · 23 Sept 2026
e032d782
-
GET /release.json; openvibe-shared v1.2.1 (the navbar loads release-watch.js: open tabs are prompted after a deploy and never reloaded while watching, broadcasting or typing)OpenVibers · 23 Sept 2026
829ac9fb
-
Live socket unit: drop PartOf=openvibe-live.service so a service restart no longer closes and reopens the listenerOpenVibers · 23 Sept 2026
c4561132
More commits