openvibers/openvibe.live Commits

N-1 fixtures re-recorded from 9437263, the release now in production (npm run n-1:record).

OP OpenVibers committed 2 Oct 2026 · 97131acec2 · 2 files, +32 −33


Changes

ddiff --git a/test/fixtures/n-1/client.json b/test/fixtures/n-1/client.json
iindex 9e2f84a8..9c1b55a9 100644
---- a/test/fixtures/n-1/client.json
++++ b/test/fixtures/n-1/client.json
@@@ -1,16 +1,16 @@
{
"service": "live",
-- "release": "fb3957f3ca2b54b65f3e51aa70eff606a47c5928",
-- "recorded_at": "2026-09-29T18:32:58.308Z",
++ "release": "9437263f09b5f742aa4f8a5f0a5741029752d744",
++ "recorded_at": "2026-10-02T16:12:35.016Z",
"note": "N-1 fixture: written by `npm run n-1:record`, replayed by test/n-1.test.js",
"manifest": {
"service": "live",
-- "release": "fb3957f3ca2b",
-- "released_at": "2026-09-29T18:32:06.000Z",
-- "booted_at": "2026-09-29T18:32:56.084Z",
-- "contracts_version": "0.71.0",
++ "release": "9437263f09b5",
++ "released_at": "2026-10-02T16:01:38.000Z",
++ "booted_at": "2026-10-02T16:12:30.723Z",
++ "contracts_version": "0.83.0",
"packages": {
-- "openvibe-shared": "1.30.1",
++ "openvibe-shared": "2.4.0",
"openvibe-sdk": "0.16.0"
},
"min_client_release": null,
@@@ -22,11 +22,11 @@
},
"shell": {
"kind": "script",
-- "version": "a6dd3b98e643"
++ "version": "60a3f0a39211"
},
"server": {
"kind": "server",
-- "version": "521d6d204d65"
++ "version": "b6aaf8e6e88d"
}
},
"assets": {
@@@ -2956,7 +2956,7 @@
"method": "GET",
"path": "/api/pastes/config",
"auth": "anon",
-- "status": 504,
++ "status": 502,
"kind": "json",
"from": [
"public/js/pastes.js"
@@@ -2966,7 +2966,7 @@
"method": "GET",
"path": "/api/pastes/config",
"auth": "user",
-- "status": 504,
++ "status": 502,
"kind": "json",
"from": [
"public/js/pastes.js"
@@@ -7088,7 +7088,7 @@
},
{
"method": "GET",
-- "path": "/shared/navbar.js?v=b8089ee3bd11",
++ "path": "/shared/navbar.js?v=017a740747b4",
"auth": "anon",
"accept": "html",
"status": 200,
@@@ -7099,7 +7099,7 @@
},
{
"method": "GET",
-- "path": "/js/app.js?v=4d24e4b46d7b",
++ "path": "/js/app.js?v=0fd06344b140",
"auth": "anon",
"accept": "html",
"status": 200,
@@@ -7275,7 +7275,7 @@
},
{
"method": "GET",
-- "path": "/js/app-home.js?v=f3884800e9a3",
++ "path": "/js/app-home.js?v=1dc431184ccc",
"auth": "anon",
"accept": "html",
"status": 200,
@@@ -7473,7 +7473,7 @@
},
{
"method": "GET",
-- "path": "/js/app-channel.js?v=c148cdba2aee",
++ "path": "/js/app-channel.js?v=7734c5c60717",
"auth": "anon",
"accept": "html",
"status": 200,
@@@ -8357,7 +8357,7 @@
"method": "POST",
"path": "/api/pastes",
"auth": "anon",
-- "status": 504,
++ "status": 502,
"kind": "json",
"from": [
"public/js/pastes.js"
@@@ -8397,7 +8397,7 @@
"method": "POST",
"path": "/api/pastes/n1star/comments",
"auth": "anon",
-- "status": 504,
++ "status": 502,
"kind": "json",
"from": [
"public/js/pastes.js"
@@@ -8417,7 +8417,7 @@
"method": "POST",
"path": "/api/pastes/n1star/copy",
"auth": "anon",
-- "status": 504,
++ "status": 502,
"kind": "json",
"from": [
"public/js/pastes.js"
@@@ -8427,7 +8427,7 @@
"method": "POST",
"path": "/api/pastes/n1star/fork",
"auth": "anon",
-- "status": 504,
++ "status": 502,
"kind": "json",
"from": [
"public/js/pastes.js"
ddiff --git a/test/fixtures/n-1/worker.json b/test/fixtures/n-1/worker.json
iindex 944b4efe..71db7073 100644
---- a/test/fixtures/n-1/worker.json
++++ b/test/fixtures/n-1/worker.json
@@@ -1,7 +1,7 @@
{
"service": "live",
-- "release": "fb3957f3ca2b54b65f3e51aa70eff606a47c5928",
-- "recorded_at": "2026-09-29T18:32:58.308Z",
++ "release": "9437263f09b5f742aa4f8a5f0a5741029752d744",
++ "recorded_at": "2026-10-02T16:12:35.016Z",
"note": "N-1 fixture: written by `npm run n-1:record`, replayed by test/n-1.test.js",
"user_version": 0,
"schema": [
@@@ -49,7 +49,6 @@
"CREATE TABLE dm_participants (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n conversation_id INTEGER NOT NULL,\n user_id INTEGER NOT NULL,\n last_read_at DATETIME DEFAULT '1970-01-01 00:00:00',\n joined_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n UNIQUE(conversation_id, user_id),\n FOREIGN KEY (conversation_id) REFERENCES dm_conversations(id) ON DELETE CASCADE,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n )",
"CREATE TABLE donation_goals (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n user_id INTEGER NOT NULL,\n title TEXT NOT NULL,\n target_amount INTEGER NOT NULL, -- in Vibes (dollars)\n current_amount INTEGER DEFAULT 0,\n is_active INTEGER DEFAULT 1,\n image_url TEXT, -- optional goal media (webp image / webm video)\n media_type TEXT, -- 'image' | 'video'\n reached_at DATETIME, -- set when target hit; drives the ~1h celebration window\n sort_order INTEGER DEFAULT 0,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n)",
"CREATE TABLE easter_egg_solves (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n egg_date TEXT NOT NULL,\n solver_key TEXT NOT NULL,\n user_id INTEGER,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n UNIQUE(egg_date, solver_key)\n )",
-- "CREATE TABLE \"emotes\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n user_id INTEGER NOT NULL,\n code TEXT NOT NULL,\n url TEXT NOT NULL,\n animated INTEGER DEFAULT 0,\n width INTEGER DEFAULT 28,\n height INTEGER DEFAULT 28,\n is_global INTEGER DEFAULT 0,\n is_approved INTEGER DEFAULT 1,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n channel_owner_id INTEGER,\n size INTEGER DEFAULT 100,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n )",
"CREATE TABLE follows (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n follower_id INTEGER NOT NULL,\n streamer_id INTEGER NOT NULL,\n email_notify INTEGER DEFAULT 0,\n push_notify INTEGER DEFAULT 0,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n UNIQUE(follower_id, streamer_id),\n FOREIGN KEY (follower_id) REFERENCES users(id) ON DELETE CASCADE,\n FOREIGN KEY (streamer_id) REFERENCES users(id) ON DELETE CASCADE\n)",
"CREATE TABLE hidden_relay_users (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n channel_id INTEGER,\n platform TEXT NOT NULL,\n external_username TEXT NOT NULL,\n action TEXT DEFAULT 'hide' CHECK(action IN ('hide','ban')),\n reason TEXT,\n created_by INTEGER,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (channel_id) REFERENCES channels(id) ON DELETE CASCADE,\n FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL\n )",
"CREATE TABLE ip_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n user_id INTEGER,\n anon_id TEXT,\n ip_address TEXT NOT NULL,\n action TEXT NOT NULL DEFAULT 'chat',\n geo_country TEXT,\n geo_region TEXT,\n geo_city TEXT,\n geo_isp TEXT,\n geo_org TEXT,\n geo_ll TEXT,\n user_agent TEXT,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL\n )",
@@@ -155,11 +154,6 @@
"CREATE INDEX idx_dm_participants_conv ON dm_participants(conversation_id)",
"CREATE INDEX idx_dm_participants_user ON dm_participants(user_id)",
"CREATE INDEX idx_egg_solves_date ON easter_egg_solves(egg_date)",
-- "CREATE UNIQUE INDEX idx_emotes_channel_code ON emotes(COALESCE(channel_owner_id, user_id), code)",
-- "CREATE INDEX idx_emotes_channel_owner ON emotes(channel_owner_id)",
-- "CREATE INDEX idx_emotes_code ON emotes(code)",
-- "CREATE INDEX idx_emotes_global ON emotes(is_global)",
-- "CREATE INDEX idx_emotes_user ON emotes(user_id)",
"CREATE INDEX idx_follows_follower ON follows(follower_id)",
"CREATE INDEX idx_follows_streamer ON follows(streamer_id)",
"CREATE INDEX idx_goals_active ON donation_goals(is_active)",
@@@ -246,25 +240,31 @@
"schema_migrations": [
{
"id": "001_vibes_decimal_to_bits",
-- "applied_at": "2026-09-29 18:32:54",
++ "applied_at": "2026-10-02 16:12:28",
"mode": "adopted",
-- "duration_ms": 0
++ "duration_ms": 1
},
{
"id": "002_pastes_ai_columns",
-- "applied_at": "2026-09-29 18:32:54",
++ "applied_at": "2026-10-02 16:12:28",
"mode": "applied",
"duration_ms": 8
},
{
"id": "004_hot_path_indexes",
-- "applied_at": "2026-09-29 18:32:54",
++ "applied_at": "2026-10-02 16:12:28",
"mode": "applied",
"duration_ms": 1
},
{
"id": "005_drop_chat_staged_tables",
-- "applied_at": "2026-09-29 18:32:54",
++ "applied_at": "2026-10-02 16:12:28",
++ "mode": "adopted",
++ "duration_ms": 1
++ },
++ {
++ "id": "006_drop_emotes",
++ "applied_at": "2026-10-02 16:12:28",
"mode": "adopted",
"duration_ms": 0
}
@@@ -1000,7 +1000,6 @@
"SELECT sql FROM sqlite_master WHERE type='index' AND tbl_name='chat_messages' AND sql IS NOT NULL",
"SELECT sql FROM sqlite_master WHERE type='table' AND name='channel_sounds'",
"SELECT sql FROM sqlite_master WHERE type='table' AND name='chat_messages'",
-- "SELECT sql FROM sqlite_master WHERE type='table' AND name='emotes'",
"SELECT sql FROM sqlite_master WHERE type='table' AND name='stream_controls'",
"SELECT started_at, is_live FROM streams WHERE id = ?",
"SELECT status, COUNT(*) AS n FROM billing_actions GROUP BY status",