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