Patch notes: Object-first writes

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

What shipped on OpenVibe on 2026-09-25: 105 changes to OpenVibe.Live, OpenVibe.Network, OpenVibe.Chat, OpenVibe.Community, OpenVibe.Media, OpenVibe.Host and 18 more. Every line below is a commit message from the OpenVibers repositories, linked to the change itself.

Highlights

  • OpenVibe.Media: Object-first writes (WS-G task 1, first stage of retiring C-75): every write to a vods/clips/files/pastes row now creates or updates its media_object in the same SQLite transaction (model.withObject; inside announce() for vod/clip… (e9a0f3a)
  • OpenVibe.Chat: Calls can run in Chat (WS-I task 1): Live's call server moved to server/calls/ with the same /ws/call protocol and limits, Live's voice-channel and /api/streams/:id/call routes on the same paths and shapes, loopback… (603d0b4)

OpenVibe.Live

openvibe.live · repository

  • Channels in OpenVibe.Search (WS-O task 10, Contracts 0.44.0): each streamer's channel is a Search document sent through the outbox as live.index_document.upserted (name, bio, recent stream titles, category, live, followers; NSFW channels… (80a6b5a)
  • Channel search documents go out with priority low (the envelope allows critical, important or low; 'normal' made Events refuse them with 422); the test's stub Events now validates envelopes as Events does (278a498)
  • Projection role rules match Live's roles: 'streamer' is Live's own (a channel), so a Network event never lowers it; staff roles follow an explicit Network role change both ways, and someone who has streamed keeps streamer when Network… (5bb4f8f)
  • Projection: Network's display name is taken only when it re-cases the username, as Live's own profile route allows (31aa74b)
  • VODs and clips in OpenVibe.Search (WS-O task 10, Contracts 0.45.0): Live owns their canonical /vod and /clip pages, so it sends live.index_document type vod and clip (title, channel, category, Live's AI overview and transcript), read from… (90641f5)
  • Search page (WS-O task 10: product search boxes use the query API): /search finds Live's channels, VODs and clips through OpenVibe.Search (GET /api/search asks anonymously for owner=live at Search's internal origin and returns only public… (ace5823)
  • Live's staff actions reach the network moderation audit log (ADR-022, WS-D task 1, Contracts 0.46.0): logModerationAction writes live.moderation.action to the outbox in the same transaction as the row (actor = the staff member's subject… (cf3e516)
  • Backfill script for the moderation audit log: Live's actions logged before live.moderation.action go to Network with their original time (same rule as logModerationAction), once each (moderation_events_backfill), only before a required… (29a0970)
  • Home live grid on Events realtime (WS-F task 1): public live.stream.started/ended from events.openvibe.network/realtime/stream refresh the grid the moment a stream starts or ends; the 12 s poll stays as the fallback and, while realtime is… (6b2f7c4)
  • CALLS_AUTHORITY flag (WS-I task 1): with CALLS_AUTHORITY=chat the go-live, stream-end, WHIP teardown and admin force-end hooks create and remove stream voice channels in OpenVibe.Chat (POST/DELETE /internal/calls/stream-channel with the… (5abf2b1)
  • nginx template: openvibe.live includes the platform's /.well-known/security.txt, as production does (WS-R task 7) (897cebc)
  • Home: no requests for the Games leaderboards and pixel canvas until OpenVibe.Games serves them (they 404 and every first visit logged CORS errors for sections that stay hidden); one switch, GAMES_HOME_WIDGETS, turns them back on (WS-M task… (b801679)
  • Internal-key retirement (WS-B task 3, C-54): the URL-registry refresh and the chat server's anon resolution ask Network with a service token (identity.subject.resolve), the key only as the fallback when no token can be had — they were the… (1f0bb98)
  • Accessibility (WS-T task 3): the browser smoke's --a11y runs axe-core (WCAG 2.1 A/AA) on every route and fails on serious or critical violations; fixed what it found — the decorative hero collage's links are not focusable, the key-sequence… (400c95c)
  • Arena: the avatar link beside each mic moment is named (the fighter), found by the browser smoke's --a11y (3c7e891)
  • Arena: the other avatar-only fighter links (battle sides, fighter cards) are named too (b349af7)
  • Bulk notification push: a sender without a Network id is sent as no sender, never as the raw Live id (Network now drops notifications from people the recipient blocked, so a Live id read as a Network id could hide the wrong ones) (91e62b7)
  • Pins: openvibe-contracts 0.46.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (ddb620d)

OpenVibe.Network

openvibe.network · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0, openvibe-sdk 0.5.0 → 0.9.1; test/registry-topics.test.js expects the live manifest's two new topics (live.index_document.upserted|deleted, Contracts 0.44.0); CI runs the pin-drift check (7c4b37b)
  • network.user.updated (WS-B task 2, Contracts 0.43.0): triggers on users record every username, display name, picture, colour, role and ban change in its own transaction, whatever code made it; a relay turns them into one event per person… (4a6f310)
  • Moderation audit log (WS-D task 1): records live.moderation.action (Contracts 0.46.0; Live's staff actions outside chat) as service live; filters by action and a since/until range beside service, actor and target; format=csv exports up to… (d3c370e)
  • Audited service grants and staff APIs (WS-D tasks 3 and 4, Contracts 0.48.0): the owner grants, changes or revokes a service principal's capability at /api/admin/grants (and the admin Service grants tab), always with a reason and… (8b48007)
  • Event deliveries in admin (WS-F task 3): the owner sees OpenVibe.Events' dead, failing and pending deliveries and replays them (one, or all shown for a subscription) through Events' operator API with a self-signed 5-minute… (eff91e6)
  • CI on the shared test and security workflows (WS-Q task 1, OpenVibe.Shared 66b76f8): install, node --check, tests, contract and pin-drift checks from one definition; this repository's own steps kept as inputs and extra steps (621fb9d)
  • nginx generator: generated vhosts include the platform's /.well-known/security.txt (WS-R task 7) (6a0023a)
  • Production drift (WS-S task 7): hourly, each running service's deployed commit is compared with its repository's main on GitHub (current, behind by N commits since the oldest undeployed one, diverged, unknown); shown under each release on… (4a9f889)
  • Production drift: the registry exposes releases() (the drift checks called it and failed silently), and a failed refresh is logged (a93b7d1)
  • Production drift: a deployed build with commits main lacks is diverged whatever main has (GitHub's compare status first, the counts as a fallback) (bca5d3f)
  • Platform blocks (WS-E task 5, Contracts 0.49.0): user_blocks by subject with a per-pair revision, /api/v1/me/blocks to list, block and unblock (never yourself or a guest; staff blockable, staff actions never hidden), network.block.changed… (ccbffa7)
  • Pins: openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (ca7b6f0)
  • Registration (WS-B task 10): /register and /signup open the create-account view; the form is username, optional email and password — the claim code for a reserved name appears only when the chosen name is reserved (it was an always-visible… (186b7fc)

OpenVibe.Chat

openvibe.chat · repository

  • Pins: openvibe-contracts 0.41.0 → 0.42.0, openvibe-sdk 0.7.0 → 0.9.1; CI runs the pin-drift check (shared test and security workflows at 423fe51) (78ee215)
  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (c09411e)
  • Chat logs, exported and audited (WS-I task 7): a staff member searching, viewing (first page) or exporting someone else's chat logs is recorded as a moderation action (chat_log_search, chat_log_view, chat_log_export →… (9dbf40b)
  • openvibe.chat settings: download your chat history (JSON or CSV) (5c3ad43)
  • Calls can run in Chat (WS-I task 1): Live's call server moved to server/calls/ with the same /ws/call protocol and limits, Live's voice-channel and /api/streams/:id/call routes on the same paths and shapes, loopback… (603d0b4)
  • nginx (openvibe.chat): /ws/chat sets the client address from the connection again (a location's proxy_set_header replaces the server-level ones, so it could be forged); /ws/call for call signalling, refused by Chat until CHAT_CALLS=1 (0fa122b)
  • Platform blocks (WS-E task 5, Contracts 0.49.0): Chat consumes network.block.changed into a newest-revision projection, and a network block counts like dm_blocks for new DMs, 1:1 messages, group invites, calls and the DM user search, both… (ea1770a)
  • Pins: openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (a7cfa50)
  • openvibe.chat names: a person's colour is mixed half-and-half with the theme's text colour so it reads on any background (raw colours were below 4.5:1 on the dark panel), and a room line's colour is checked as a hex colour before it… (c16a83d)
  • openvibe.chat buttons use the derived --accent-strong pair (4.5:1 in every theme) — WS-T task 3 (858fd5a)

OpenVibe.Community

openvibe.community · repository

  • Pins: openvibe-contracts 0.41.0 → 0.44.0; CI runs the pin-drift check (shared test and security workflows at 423fe51) (adbfd8b)
  • Threads and pastes in OpenVibe.Search (WS-O task 10, Contracts 0.44.0): each public thread (public, open space; open thread) and public paste is a community.index_document.upserted through the outbox, sent only when it changed with a… (6b608f3)
  • Search: a paste whose slug starts with '-' or '' is indexed as paste<row id> (a Search document id starts with a letter or digit; Search refused -wgXuYn0); the refused id is forgotten, with no tombstone (0fe3c07)
  • Search page (WS-O task 10: product search boxes use the query API): /search finds public threads and pastes through OpenVibe.Search (anonymous, owner=community, at its internal origin), with type filter and cursor paging; snippets keep… (49282fc)
  • Pulse on Events realtime (WS-F task 1): on the first page, public activity from here and the other sites (new pastes, threads, replies, go-lives, blog, wiki and news posts) arrives over events.openvibe.network/realtime/stream and a bar… (d401ef4)
  • Platform blocks (WS-E task 5, Contracts 0.49.0): Community consumes network.block.changed into a newest-revision projection and refuses (403 community.blocked, plain message on the no-JS forms) a reply in a thread whose author blocked you… (0cce476)
  • Pins: openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (077d7be)
  • Community: primary buttons use the derived --accent-strong pair (4.5:1 in every theme) and links in running text are underlined (colour alone did not mark them) — WS-T task 3 (4132923)

OpenVibe.Media

openvibe.media · repository

  • Pins: openvibe-contracts 0.33.0 → 0.44.0; CI runs the pin-drift check (shared test and security workflows at 423fe51) (30dc5eb)
  • Media's own watch pages in OpenVibe.Search (WS-O task 10, Contracts 0.45.0): media.index_document.upserted for exactly the pages the sitemap lists (one WATCH_WHERE rule shared by both: public, finished, playable, made by a person, not… (bc7b1a5)
  • Object-first writes (WS-G task 1, first stage of retiring C-75): every write to a vods/clips/files/pastes row now creates or updates its media_object in the same SQLite transaction (model.withObject; inside announce() for vod/clip… (e9a0f3a)
  • Footer: Media's own links as the shared footer's { name, url } items (label/href rendered four empty links; found by an axe survey, WS-T task 3) (43a051e)
  • Pins: openvibe-contracts 0.45.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (91520ee)
  • Media index: the selected tab uses the derived --accent-strong/--on-accent-strong pair (Shared 1.13.0), 4.5:1 in every theme; white on the accent was below it (WS-T task 3) (ab8cc62)
  • Media index: the selected tab's count is not dimmed (3.3:1), and a pager arrow that goes nowhere says it is disabled — WS-T task 3 (81ccb68)

OpenVibe.Host

openvibe.host · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (3613a1d)
  • Backup alerts (WS-S task 3): ovhost backup --all (and offsite push) writes the run's outcome to node_exporter's textfile collector (last run, ok, last success, per-status counts, off-site ok); ovhost backup-metrics rewrites it from a… (eab60f6)
  • Nightly backups: runuser by absolute path, and /usr/sbin on the backup unit's PATH — the scheduled runs of 2026-09-24 and 2026-09-25 failed for every database with 'spawn runuser ENOENT' (manual runs under sudo worked); found by the new… (40a25fe)
  • nginx templates: the platform's /.well-known/security.txt (snippets/security-txt.conf) on every service vhost ovhost renders and on the Host dashboard; tenants' custom domains keep their own (WS-R task 7) (fba26c9)
  • Prometheus: OpenVibeDeployDrift — a service whose main has had undeployed commits for more than a day (WS-S task 7) (0e3a7ea)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (577e8c3)

OpenVibe.Tools

openvibe.tools · repository

  • Pins (every apps/* package): openvibe-contracts 0.33.1 → 0.44.0 (audio, docs, gateway, img), openvibe-sdk 0.4.0 → 0.9.1 (audio, docs, img; gateway already 0.9.1), openvibe-shared 1.11.1 → 1.12.0 (audio, docs, food, img, maps, text, yt… (4bbfd62)
  • CI on the shared test and security workflows (WS-Q task 1, OpenVibe.Shared 66b76f8): install, node --check, tests, contract and pin-drift checks from one definition; this repository's own steps kept as inputs and extra steps (c73d4dc)
  • CI: no npm cache at the root (there is no root lockfile; each app installs its own) (db31b43)
  • nginx: every Tools vhost includes the platform's /.well-known/security.txt in its serving block, as production already does (WS-R task 7); the SDK client test compares versions numerically (0.11.0 is later than 0.6.0) (cca0d82)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (9d3b267)
  • Tools home: the search button uses the derived --accent-strong pair (4.5:1 in every theme), and planned tiles dim their icon instead of their text (the tagline read at 3.2:1) — WS-T task 3 (0b14739)

OpenVibe.Games

openvibe.games · repository

  • Pins: openvibe-contracts 0.39.0 → 0.44.0 (apps/server; openvibe-sdk already 0.9.1); CI runs the pin-drift check (4d91de9)
  • CI on the shared test and security workflows (WS-Q task 1, OpenVibe.Shared 66b76f8): install, node --check, tests, contract and pin-drift checks from one definition; this repository's own steps kept as inputs and extra steps (e27e161)
  • Footer: the Games and Account columns as the shared footer's { name, url } items (label/href rendered six empty links; found by an axe survey, WS-T task 3) (9901bed)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-sdk 0.9.1 → 0.11.0 (19108de)

OpenVibe.Blog

openvibe.blog · repository

  • Pins: openvibe-contracts 0.38.0 → 0.42.0, openvibe-sdk 0.7.0 → 0.9.1; CI runs the pin-drift check (shared test and security workflows at 423fe51) (f235c8b)
  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (6905891)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (ffc1357)

OpenVibe.Search

search.openvibe.network · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (ff202c7)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0 (b70f275)
  • Search page: the button uses the derived --accent-strong pair (4.5:1 in every theme; white on the accent was 3.67:1) — WS-T task 3 (162a9f0)

OpenVibe.AI

ai.openvibe.network · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (bc5b78d)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (8038305)

OpenVibe.Billing

billing.openvibe.network · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (6c00c55)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0 (2db6158)

OpenVibe.Codes

openvibe.codes · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit); test/docs.test.js expects v0.44.0 (bdb28de)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (de62855)

OpenVibe.Coupons

openvibe.coupons · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (11f6641)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (e19cc3a)

OpenVibe.Deals

openvibe.deals · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (294f7b5)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (e422232)

OpenVibe.Events

events.openvibe.network · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (4a83adc)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0 (e2cb9ea)

OpenVibe.News

openvibe.news · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (9f027d3)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (8246a22)

OpenVibe.Reviews

openvibe.reviews · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (3aa08bb)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (42dbc0c)

OpenVibe.Sources

sources.openvibe.network · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (520e12c)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0 (85fd578)

OpenVibe.Tips

openvibe.tips · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (2e0bb45)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (56f8579)

OpenVibe.Trade

openvibe.trade · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (8996959)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (9bb7f93)

OpenVibe.VIP

openvibe.vip · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (1c9a995)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (f7a3315)

OpenVibe.Wiki

openvibe.wiki · repository

  • Pins: openvibe-contracts 0.42.0 → 0.44.0 (Contracts 0.43.0 and 0.44.0 were released after the previous pin commit, leaving 0.42.0 two minors behind the pin-drift limit) (588f2e5)
  • Pins: openvibe-contracts 0.44.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.9.1 → 0.11.0 (2aa7301)

OpenRe.Stream

openre.stream · repository

  • Pins: openvibe-contracts 0.33.0 → 0.49.0, openvibe-shared 1.12.0 → 1.13.0, openvibe-sdk 0.5.0 → 0.11.0 (0284216)

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 could not be loaded from OpenVibe.Community right now. Reload later.