Skip to content
-
Agent streams S1: the desk stream, its tickets, the curtain and the two pages (#622)OpenVibers · 7 days ago
f93ba8fe
-
Go live setup is one screen: the ready card first, Suggest titles, folds that say what they hold, saved as you type (#543)OpenVibers · 11 days ago
795304aa
-
AI text may describe people; nudity is art; swearing is fine; only the home page stays clean (#469)OpenVibers · 12 days ago
f6ee54e1
-
Live's own money ledger goes (contract 0016, after 0009): transactions, payment_orders, subscriptions, the users money columns, and vpn_approvals (#336)OpenVibers · 20 days ago
ccbc98ac
-
Each page carries only its own markup and one <h1>: the home page, Updates and the Rundown are fragments inlined on their own route, so other pages lose the home hero's 37 KB and its <h1> (#343)OpenVibers · 20 days ago
d8b41591
-
WebSocket paths Live does not serve get a plain HTTP answer (410 for the retired /ws/control, else 404) instead of a dropped socket nginx logged as a 502 (#338)OpenVibers · 21 days ago
977e0788
-
Docs match production: STATUS lists The Rundown (the Arena went 10-19), the bot embed is on in production, and the Chat tables were never created on PostgreSQL (no 007_drop_chat_tables migration exists) (#295)OpenVibers · 22 days ago
04ce3f4b
-
Live's old robot controls tables are dropped (plan T15 B9): control configs, buttons, whitelist, per-stream controls, ONVIF cameras and api_keys, with the channel, slot and stream columns that pointed at them (#292)OpenVibers · 23 days ago
42439e92
-
The Rundown replaces the Arena: what streamers talked about, written up from their speech (topics, each streamer's take in their own words with a link to the moment, the desk's quip, every stream as an episode with a recap and chapters, crossovers when they name each other); no beefs, ratings, Lolcow Index or Clout Rankings; game audio is never a quote, quotes are verbatim, invented accusations are dropped; /arena redirects (owner, 2026-10-19) (#252)OpenVibers · 25 days ago
eccfa666
-
Docs: frozen tables are gone from Live's database (fix a dead anchor) (#221)OpenVibers · 27 days ago
74d343b0
-
AGENTS.md: public AI text passes db.noLooks / noLooksTags / hasLooks (prompts alone miss about one in ten) (#205)OpenVibers · 27 days ago
138dc0ac
-
Billing is the only money mode: remove Live's old ledger code (#182)OpenVibers · 27 days ago
35d02c6b
-
Live: chat's robot commands drive the channel's OpenVibe.Bot robot; Live's robot controls are deleted; the phone chat sheet is full width again (#119)OpenVibers · 14 Oct 2026
95faead4
-
Live: public routes block only on a first-paint subset of style.css (84 KB of 468); the full file follows in the same cascade place (#113)OpenVibers · 12 Oct 2026
8c5ac2bf
-
Live: Media outcomes arrive only over OpenVibe.Events; the direct media webhook and its authority switch are deleted (#68)OpenVibers · 10 Oct 2026
d7fb5009
-
Live: cosmetics live only in OpenVibe.Inventory (ADR-054 §8) — the INVENTORY_AUTHORITY switch and Live's table reads are gone, Chat's decor lookups read 100 people per Inventory call, and the legacy chat tags left with the game (#54)OpenVibers · 9 Oct 2026
85131ef4
-
Live: cosmetics can live in OpenVibe.Inventory (INVENTORY_AUTHORITY=inventory, ADR-054 §8) — the same cosmetics API reads and writes live.* items there with Live's token acting for the person; live stays the default until the import verifies (#53)OpenVibers · 9 Oct 2026
798f86e5
-
Live after the switch to PostgreSQL: N-1 fixtures re-recorded from 81dc337 (the release now in production, so the N-1 SQL replay runs again); the docs say PostgreSQL (#47)OpenVibers · 8 Oct 2026
96f6bf55
-
Drop Live's twelve legacy chat tables at boot (007_drop_chat_tables, owner-approved); N-1 fixtures re-recorded from 1d49484e, the release now in production (#34)OpenVibers · 5 Oct 2026
2176be56
-
Live keeps no copy of Chat's twelve chat tables: every use removed, boot no longer creates them, the drop is op_003 (after this release is N-1) (#33)OpenVibers · 5 Oct 2026
1d49484e
-
Delete Live's chat-server.js: every chat push and presence read goes through chat-delivery and chat-client; the local /ws/chat upgrade path is gone (OpenVibe.Chat serves it) (#30)OpenVibers · 5 Oct 2026
9f758487
-
Live T3 N+2: Live's copies of seven chat tables are dropped, and robot commands from chat pass the control gate.OpenVibers · 29 Sept 2026
fb3957f3
-
Live's T3 N+1 release: the staged-table machinery, Live's chat-AI job and the old emote and channel-moderation routes are deleted (plan T3 step 5; OpenVibe.Chat has written the six tables since 14:46 UTC and serves their APIs).OpenVibers · 29 Sept 2026
8654ef6b
-
Live reads the six chat tables from Chat (plan T3 step 3; Chat has been their writer since 14:46 UTC): server/chat/moderation-client.js asks Chat's internal read API (chat.moderation.read, service token, 30 s cache, a failure answers 'not a moderator' and defaults, off under LIVE_DRILL) for channel moderation, the channels a person moderates and emote counts; permissions are async on that client (sync peeks for the few paths that cannot await, warming the cache); setup-progress, the about page, clip moderation and account data read through it or leave the six to Chat; the dashboard, channel page and uploads call Chat's /api/chat/channels/… and /api/chat/ai/… directly; donation and goal alert sounds are played by Chat (bridge op playAlertSound); the channel rows Chat reads carry emote_sources and a channel-emote-sources effect writes them; the emote asset backfill and user_tags reader are gone. Live's old emote and channel-moderation routes stay one release for N-1 (they write through the bridge to Chat). New tests for the client and the alert op. npm test 154/156, 2 skipped (verified).OpenVibers · 29 Sept 2026
8cead363
-
Going live from the browser, with no OBS, no downloads and no follower minimum, leads again: AI assistants recommend OpenVibe.Live for exactly that, and it had been folded behind "See what makes it different". The home page shows it always: a Go Live strip above the toggle (logged out, it opens sign-up), and a link to the new docs/go-live-in-your-browser.md (/docs/go-live-in-your-browser), a server-rendered page with the steps, devices, what you need and don't, and a questions section. The home title, description, Open Graph and Twitter tags, the SSR snapshot (a Go live in your browser section) and the JSON-LD (a WebApplication with browserRequirements and featureList) now say it first. /llms.txt's summary says it and gains a Going live from a browser section. Every docs page now has a meta description and Open Graph tags from its first paragraph. Home budgets hold (blocking CSS 701/760 KB). npm test 149/150, 1 skipped.OpenVibers · 28 Sept 2026
6c2d06be
-
Staged chat tables move to OpenVibe.Chat one table at a time (WS-I task 2, register C-04): server/chat/chat-tables.js reads who writes channel_moderators, channel_moderation_settings, emotes, user_tags, chat_ai_summaries and chat_timeline_events from app_state chat_table_authority (every table 'live' by default, always 'live' without CHAT_AUTHORITY=chat), and every Live writer goes through its write(): the dashboard's moderators and settings, /slow and alert sounds, emote upload/edit/delete and the Media asset-sync, chat-AI summaries and timeline (test/chat-tables-writers.test.js keeps it so; user_tags has no writer). At 'live' Live writes its own table and TEMP-trigger capture relays every change to Chat's copy (chat_staged_outbox, bridge op stagedApply; POST /internal/chat-tables/relay pauses it for an import); a per-table dual read compares Live's reads with Chat's copy in the background and counts matched/mismatched/inconclusive in chat_dual_read_stats, never changing an answer. POST /internal/chat-tables/:table (X-Internal-Key) hands a table over, its writers waiting: Live's queue drained, Chat takes it, Live stops writing; back: Chat's mirror drained first, then Live writes again (force for Chat down); GET /internal/chat-tables shows both sides. At 'chat' Live's writers call Chat over the bridge (awaited, idempotency key) and apply Chat's rows to Live's copy, which is then the read mirror (applyMirror takes staged rows only for a table Chat writes). Nothing starts under LIVE_DRILL or without CHAT_AUTHORITY=chat; no schema change beyond two new tables. The emote upload's 409 path no longer throws inside its catch. Runbook: OpenVibe.Chat docs/staged-tables-cutover.mdOpenVibers · 26 Sept 2026
d6480da6
-
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 slots are a labelled group, chat send buttons are named, the chat mode select is labelledOpenVibers · 25 Sept 2026
400c95c9
-
Kiosk companion and hardware scripts moved to OpenVibe.Extensions (ADR-023, W18): browser-extension/ and hardware/ keep only redirect READMEs pointing at OpenVibe.Extensions kiosk-companion/ and hardware/ (moved unchanged at 9c5aa64)OpenVibers · 24 Sept 2026
ce6a7332
-
Production runs the release layout (C-76 done 2026-09-24 05:51 UTC): deploy from /opt/openvibe.live/current; the old checkout files are stale; release ids come from the directory name; the host inventory runs git for Live as rootOpenVibers · 24 Sept 2026
9c5aa64f
-
Restore drills: LIVE_DRILL=1 makes Live a read-only instance on a restored copy, so `ovhost drill live` can boot one next to production. It refuses to start unless DB_PATH and DATA_DIR are set and outside the checkout and /opt/openvibe.live, HOST is loopback, PORT is not 3000 and no socket was handed over by systemd, before any file is opened. It then starts only its HTTP server (no jobs, WebSocket servers, RTMP, SFU, JSMPEG, WHIP, TURN credentials, restream or relay resume, AI jobs, Media reconcilers, Events outbox, chat bridge, identity sync, deploy notice, star job or registry refresh), answers 403 to every method but GET/HEAD/OPTIONS and to every WebSocket upgrade, and guards net/fetch/child_process/dgram/listen so nothing leaves the process (other services look down; only git runs). Every file location now comes from server/paths.js (DATA_DIR, default ./data), analytics.db included; module-level timers stay off in a drill. test/drill-mode.test.js boots the real server that way and checks each pointOpenVibers · 23 Sept 2026
8a58aea2
More commits