openvibers/openvibe.live Commits

Live: drop user_cosmetics, user_equipped and user_equipped_tag (merge on or after 2026-10-15 18:00 UTC) (#55)

OP OpenVibers committed 29 days ago · 0f7561a53e · 2 files, +17 −1

* Live: drop user_cosmetics, user_equipped and user_equipped_tag (ADR-054 §8 contract step after the N-1 window; OpenVibe.Inventory holds every row)

* Live#55: the drop is migration 0005 (0003 and 0004 landed first)

Changes

ddiff --git a/migrations/0005_drop_live_cosmetics.sql b/migrations/0005_drop_live_cosmetics.sql
nnew file mode 100644
iindex 00000000..94ad59b9
---- /dev/null
++++ b/migrations/0005_drop_live_cosmetics.sql
@@@ -0,0 +1,10 @@
++-- phase: contract
++-- after: 0002
++-- ADR-054 §8: Live's cosmetics live in OpenVibe.Inventory since 2026-10-09 14:53 UTC. The import was applied and verified
++-- row for row first (8 people, 153 unlocks, 16 slots), and since Live#54 nothing in Live reads or writes these three
++-- (test/cosmetics-tables-gone.test.js). user_equipped_tag held 0 rows: the legacy game that wrote it is gone.
++-- The N-1 release (Live#54) names none of them. Rollback: OpenVibe.Inventory holds every row (its scripts/import-live.js
++-- --verify compared them); the operator-side dump taken before the deploy restores the tables if ever needed.
++DROP TABLE IF EXISTS user_equipped_tag;
++DROP TABLE IF EXISTS user_equipped;
++DROP TABLE IF EXISTS user_cosmetics;
ddiff --git a/test/cosmetics-tables-gone.test.js b/test/cosmetics-tables-gone.test.js
iindex ac19f79d..558eaebc 100644
---- a/test/cosmetics-tables-gone.test.js
++++ b/test/cosmetics-tables-gone.test.js
@@@ -29,4 +29,10 @@ for (const file of [...walk(path.join(ROOT, 'server')), ...walk(path.join(ROOT,
assert.deepStrictEqual(offenders, [], 'Live\'s cosmetics are OpenVibe.Inventory\'s (ADR-054 §8): read them through server/monetization/cosmetics.js');
assert.ok(!fs.existsSync(path.join(ROOT, 'server/chat/tags.js')), 'the legacy chat tags left with the game');
assert.ok(!/INVENTORY_AUTHORITY/.test(fs.readFileSync(path.join(ROOT, 'server/monetization/cosmetics.js'), 'utf8')), 'no switch back to Live\'s tables');
--console.log('cosmetics tables: nothing under server/ or scripts/ names them');
++// The contract migration drops them, after the N-1 window (it names 0002, so the migrator holds it for 7 days).
++const drop = fs.readFileSync(path.join(ROOT, 'migrations', '0005_drop_live_cosmetics.sql'), 'utf8');
++assert.match(drop, /^-- phase: contract$/m);
++assert.match(drop, /^-- after: 0002$/m);
++const dropped = [...drop.matchAll(/^DROP TABLE IF EXISTS (\w+);$/gm)].map((m) => m[1]).sort();
++assert.deepStrictEqual(dropped, ['user_cosmetics', 'user_equipped', 'user_equipped_tag'], '0003 drops exactly the three');
++console.log('cosmetics tables: nothing under server/ or scripts/ names them, and 0003 drops them');