openvibers/openvibe.network Commits

Wave 0 baseline: regenerate after the Wave 1 identity deploy (identity_legacy_map, Contracts alpha)

OP OpenVibers committed 22 Sept 2026 · e5eb7dd77c · 8 files, +347 −310


Changes

ddiff --git a/docs/roadmap-baseline/01-services.md b/docs/roadmap-baseline/01-services.md
iindex 65e19e69..6f43c723 100644
---- a/docs/roadmap-baseline/01-services.md
++++ b/docs/roadmap-baseline/01-services.md
@@@ -8,8 +8,8 @@ Deliverable 1: runtimes, ports, units, env files and repository state.
| Service | Repo | Stage | Ports | Units | Env file | Deployed | Databases |
|---|---|---|---|---|---|---|---|
--| network | OpenVibe.Network | live | http 4000 | openvibe-network.service | /etc/openvibe/network.env | 71be248 | data/network.db |
--| live | OpenVibe.Live | live | http 3000, rtmp 1935/9935, mediasoup 11000-11300/udp, jsmpegRelayTls 9710-9789 | openvibe-live.socket, openvibe-live.service | /etc/openvibe/live.env | e31e342 | data/live.db, data/analytics.db, data/rs-companion.db |
++| network | OpenVibe.Network | live | http 4000 | openvibe-network.service | /etc/openvibe/network.env | 9b4e262 | data/network.db |
++| live | OpenVibe.Live | live | http 3000, rtmp 1935/9935, mediasoup 11000-11300/udp, jsmpegRelayTls 9710-9789 | openvibe-live.socket, openvibe-live.service | /etc/openvibe/live.env | 24151bd | data/live.db, data/analytics.db, data/rs-companion.db |
| media | OpenVibe.Media | partial | http 4100, rtpIngest 12000-12199/udp (127.0.0.1) | openvibe-media.service | /etc/openvibe/media.env | 6114bc6 | data/media.db |
| tools | OpenVibe.Tools | live | gateway 4001, maps 4010, food 4011, img 4012, yt 4013, audio 4014, text 4015, docs 4016 | openvibe-tools.service, openvibe-tools-maps.service, openvibe-tools-food.service, openvibe-tools-img.service, openvibe-tools-yt.service, openvibe-tools-audio.service, openvibe-tools-text.service, openvibe-tools-docs.service | /etc/openvibe/tools.env | 0346edc | apps/<satellite>/data/analytics.db |
| games | OpenVibe.Games | live | http 8000 | openvibe-games.service | /etc/openvibe/games.env | 43c11f0 | data/world.db |
@@@ -20,8 +20,8 @@ Deliverable 1: runtimes, ports, units, env files and repository state.
| Repo | HEAD | origin/main | Source files | LOC | Test files | CI | Routes | Tables | WS servers | Timers/jobs | TODO(contract) |
|---|---|---|---|---|---|---|---|---|---|---|---|
--| OpenVibe.Live | e31e342 | e31e342 | 164 | 69622 | 55 | no | 532 | 125 | 8 | 48 | 15 |
--| OpenVibe.Network | 71be248 | 71be248 | 77 | 20399 | 17 | no | 185 | 35 | 0 | 11 | 0 |
++| OpenVibe.Live | 24151bd | 24151bd | 165 | 69699 | 56 | no | 532 | 125 | 8 | 48 | 15 |
++| OpenVibe.Network | 9b4e262 | 9b4e262 | 79 | 20646 | 18 | no | 187 | 36 | 0 | 11 | 0 |
| OpenVibe.Media | 6114bc6 | 6114bc6 | 28 | 8702 | 4 | no | 67 | 15 | 0 | 9 | 0 |
| OpenVibe.Tools | 0346edc | 0346edc | 117 | 20018 | 2 | no | 99 | 4 | 0 | 12 | 0 |
| OpenVibe.Community | de947ea | de947ea | 11 | 1754 | 8 | no | 22 | 4 | 0 | 0 | 0 |
@@@ -44,16 +44,16 @@ LOC counts non-test source files in the scanned directories only (`server/`, `ap
| OpenVibe.Chat | PUBLIC | placeholder (no code) | 2026-09-21 | 13 KB | Rooms, messages, DMs, calls, TTS and audio queues, moderation and presence — one identity, every conversation. |
| OpenVibe.Codes | PUBLIC | placeholder (no code) | 2026-09-21 | 13 KB | The developer portal: registry and contract explorers, credentials, playgrounds, examples, mod/app publishing, governance. |
| OpenVibe.Community | PUBLIC | - | 2026-09-21 | 687 KB | |
--| OpenVibe.Contracts | PUBLIC | placeholder (no code) | 2026-09-21 | 13 KB | Machine-readable contracts for the whole OpenVibe network. |
++| OpenVibe.Contracts | PUBLIC | alpha | 2026-09-22 | 13 KB | Machine-readable contracts for the whole OpenVibe network. |
| OpenVibe.Coupons | PUBLIC | placeholder (no code) | 2026-09-21 | 13 KB | Coupon codes with merchant matching, restrictions, expiry and real-people validity reports. |
| OpenVibe.Deals | PUBLIC | placeholder (no code) | 2026-09-21 | 13 KB | Deals submitted and voted on by the community, with source, price and freshness always shown. |
| OpenVibe.Events | PUBLIC | placeholder (no code) | 2026-09-21 | 13 KB | Durable events, subscriptions, delivery, retry, dead letters and replay for the network. |
| OpenVibe.Examples | PUBLIC | placeholder (no code) | 2026-09-21 | 13 KB | Executable public integration examples, tested in CI against the platform. |
| OpenVibe.Games | PUBLIC | - | 2026-09-21 | 4675 KB | |
| OpenVibe.Host | PUBLIC | placeholder (no code) | 2026-09-21 | 13 KB | The network's deployment/control plane first; then isolated hosting for community sites, bots and mods. |
--| OpenVibe.Live | PUBLIC | - | 2026-09-21 | 6455 KB | |
++| OpenVibe.Live | PUBLIC | - | 2026-09-22 | 6455 KB | |
| OpenVibe.Media | PUBLIC | - | 2026-09-21 | 847 KB | |
--| OpenVibe.Network | PUBLIC | - | 2026-09-21 | 1037 KB | |
++| OpenVibe.Network | PUBLIC | - | 2026-09-22 | 1037 KB | |
| OpenVibe.News | PUBLIC | placeholder (no code) | 2026-09-21 | 13 KB | Source-backed stories: clustered coverage, cited summaries, perspectives and timelines. |
| OpenVibe.Realtime | PUBLIC | placeholder (no code) | 2026-09-21 | 13 KB | Browser delivery plane for events: authorised WS/SSE topics with cursors, resume and presence. |
| OpenVibe.Reviews | PUBLIC | placeholder (no code) | 2026-09-21 | 13 KB | Review signals gathered across sources with provenance, entity resolution and honest aggregates. |
ddiff --git a/docs/roadmap-baseline/02-schema.md b/docs/roadmap-baseline/02-schema.md
iindex 3b19286b..b2940700 100644
---- a/docs/roadmap-baseline/02-schema.md
++++ b/docs/roadmap-baseline/02-schema.md
@@@ -16,7 +16,7 @@ Deliverable 2: every table declared in code or present in production, with curre
| /opt/openvibe.live/data/live.db | 279.2 MB | 146 |
| /opt/openvibe.live/data/rs-companion.db | 8.6 MB | 33 |
| /opt/openvibe.media/data/media.db | 5.6 MB | 11 |
--| /opt/openvibe.network/data/network.db | 766.5 MB | 34 |
++| /opt/openvibe.network/data/network.db | 766.5 MB | 35 |
| /opt/openvibe.tools/apps/audio/data/analytics.db | 59.9 MB | 4 |
| /opt/openvibe.tools/apps/img/data/analytics.db | 5.5 MB | 4 |
| /opt/openvibe.tools/apps/docs/data/analytics.db | 1.5 MB | 4 |
@@@ -30,23 +30,23 @@ Deliverable 2: every table declared in code or present in production, with curre
| Table | Declared at | In prod | Target owner | Disposition | Wave |
|---|---|---|---|---|---|
| active_effects | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
--| ai_chatbot_configs | server/db/database.js:1803 | live.db | OpenVibe.AI | extract | W13 |
++| ai_chatbot_configs | server/db/database.js:1807 | live.db | OpenVibe.AI | extract | W13 |
| ai_conversations | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
| ai_memory | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
--| ai_timeline_cache | server/db/database.js:1296 | live.db | OpenVibe.AI | extract | W13 |
--| ai_usage | server/db/database.js:1254 | live.db | OpenVibe.AI | extract | W13 |
--| ai_viewer_log | server/db/database.js:1887 | live.db | OpenVibe.AI | extract | W13 |
--| ai_viewer_threads | server/db/database.js:1873 | live.db | OpenVibe.AI | extract | W13 |
++| ai_timeline_cache | server/db/database.js:1300 | live.db | OpenVibe.AI | extract | W13 |
++| ai_usage | server/db/database.js:1258 | live.db | OpenVibe.AI | extract | W13 |
++| ai_viewer_log | server/db/database.js:1891 | live.db | OpenVibe.AI | extract | W13 |
++| ai_viewer_threads | server/db/database.js:1877 | live.db | OpenVibe.AI | extract | W13 |
| analytics_daily | vendor/openvibe-shared/analytics.js:116 | analytics.db | OpenVibe.Live | keep | Track O / ADR-021 |
| analytics_events | vendor/openvibe-shared/analytics.js:74 | analytics.db | OpenVibe.Live | keep | Track O / ADR-021 |
| analytics_hourly | vendor/openvibe-shared/analytics.js:98 | analytics.db | OpenVibe.Live | keep | Track O / ADR-021 |
| analytics_rate_tracking | vendor/openvibe-shared/analytics.js:137 | analytics.db | OpenVibe.Live | keep | Track O / ADR-021 |
| analytics_snapshots | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
--| anon_ip_mappings | server/db/database.js:936 | live.db | OpenVibe.Network (policy) | extract | W1 |
++| anon_ip_mappings | server/db/database.js:940 | live.db | OpenVibe.Network (policy) | extract | W1 |
| api_keys | server/db/schema.sql:391 | live.db | OpenVibe.Network (principals) / OpenVibe.Codes | extract | W1/W20 |
| api_tokens | server/db/schema.sql:404 | live.db | OpenVibe.Network (principals) / OpenVibe.Codes | extract | W1/W20 |
--| app_state | server/db/database.js:1167 | live.db | OpenVibe.Live | keep | - |
--| approved_ips | server/db/database.js:2075 | live.db | OpenVibe.Network (policy) | extract | W1 |
++| app_state | server/db/database.js:1171 | live.db | OpenVibe.Live | keep | - |
++| approved_ips | server/db/database.js:2079 | live.db | OpenVibe.Network (policy) | extract | W1 |
| arena_achievements | (prod only) | live.db | archive then drop | investigate | W0 |
| arena_battles | (prod only) | live.db | archive then drop | investigate | W0 |
| arena_beef_hype | server/arena/beef.js:58 | live.db | OpenVibe.Live | keep | - |
@@@ -87,19 +87,19 @@ Deliverable 2: every table declared in code or present in production, with curre
| canvas_tiles | (prod only) | live.db | OpenVibe.Games | frozen-legacy | W12 |
| canvas_user_overrides | (prod only) | live.db | OpenVibe.Games | frozen-legacy | W12 |
| changelog_entries | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
--| channel_ai_bots | server/db/database.js:1828 | live.db | OpenVibe.AI | extract | W13 |
--| channel_ai_config | server/db/database.js:1852 | live.db | OpenVibe.AI | extract | W13 |
--| channel_moderation_settings | server/db/database.js:1638, server/db/schema.sql:514 | live.db | OpenVibe.Chat | extract | W6 |
--| channel_moderators | server/db/database.js:1621, server/db/schema.sql:499 | live.db | OpenVibe.Chat | extract | W6 |
--| channel_points | server/db/database.js:760 | live.db | OpenVibe.Billing (loyalty ledger) | extract | W8 (after ADR-012) |
--| channel_sounds | server/db/database.js:1741, server/db/schema.sql:625 | live.db | OpenVibe.Chat | extract | W6 |
--| channel_sounds_new | server/db/database.js:1765 | no | OpenVibe.Chat | extract | W6 |
++| channel_ai_bots | server/db/database.js:1832 | live.db | OpenVibe.AI | extract | W13 |
++| channel_ai_config | server/db/database.js:1856 | live.db | OpenVibe.AI | extract | W13 |
++| channel_moderation_settings | server/db/database.js:1642, server/db/schema.sql:514 | live.db | OpenVibe.Chat | extract | W6 |
++| channel_moderators | server/db/database.js:1625, server/db/schema.sql:499 | live.db | OpenVibe.Chat | extract | W6 |
++| channel_points | server/db/database.js:764 | live.db | OpenVibe.Billing (loyalty ledger) | extract | W8 (after ADR-012) |
++| channel_sounds | server/db/database.js:1745, server/db/schema.sql:625 | live.db | OpenVibe.Chat | extract | W6 |
++| channel_sounds_new | server/db/database.js:1769 | no | OpenVibe.Chat | extract | W6 |
| channels | server/db/schema.sql:26 | live.db | OpenVibe.Live | keep | - |
--| chat_ai_summaries | server/db/database.js:1308 | live.db | OpenVibe.Chat | extract | W6 |
++| chat_ai_summaries | server/db/database.js:1312 | live.db | OpenVibe.Chat | extract | W6 |
| chat_log | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
| chat_messages | server/db/schema.sql:148 | live.db | OpenVibe.Chat | extract | W6 |
--| chat_messages_new | server/db/database.js:415 | no | OpenVibe.Chat | extract | W6 |
--| chat_timeline_events | server/db/database.js:1328 | live.db | OpenVibe.Chat | extract | W6 |
++| chat_messages_new | server/db/database.js:419 | no | OpenVibe.Chat | extract | W6 |
++| chat_timeline_events | server/db/database.js:1332 | live.db | OpenVibe.Chat | extract | W6 |
| chatter_profiles | (prod only) | live.db | archive then drop | investigate | W0 |
| chatter_subjects | (prod only) | live.db | archive then drop | investigate | W0 |
| chatter_xp_log | (prod only) | live.db | archive then drop | investigate | W0 |
@@@ -108,11 +108,11 @@ Deliverable 2: every table declared in code or present in production, with curre
| coin_redemptions | server/db/schema.sql:689 | live.db | OpenVibe.Billing (loyalty ledger) | extract | W8 (after ADR-012) |
| coin_rewards | server/db/schema.sql:668 | live.db | OpenVibe.Billing (loyalty ledger) | extract | W8 (after ADR-012) |
| coin_transactions | server/db/schema.sql:651 | live.db | OpenVibe.Billing (loyalty ledger) | extract | W8 (after ADR-012) |
--| comments | server/db/database.js:849, server/db/schema.sql:585 | live.db | OpenVibe.Community | extract | W5 |
++| comments | server/db/database.js:853, server/db/schema.sql:585 | live.db | OpenVibe.Community | extract | W5 |
| content_views | server/db/schema.sql:328 | live.db | OpenVibe.Live | keep | - |
--| control_config_buttons | server/db/database.js:2306 | live.db | OpenRe.Stream | extract | W7 |
--| control_configs | server/db/database.js:2292 | live.db | OpenRe.Stream | extract | W7 |
--| control_whitelist | server/db/database.js:2277 | live.db | OpenRe.Stream | extract | W7 |
++| control_config_buttons | server/db/database.js:2310 | live.db | OpenRe.Stream | extract | W7 |
++| control_configs | server/db/database.js:2296 | live.db | OpenRe.Stream | extract | W7 |
++| control_whitelist | server/db/database.js:2281 | live.db | OpenRe.Stream | extract | W7 |
| custom_rewards | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
| daily_claims | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
| divorce_history | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
@@@ -122,9 +122,9 @@ Deliverable 2: every table declared in code or present in production, with curre
| dm_participants | server/chat/dm.js:31 | live.db | OpenVibe.Chat | extract | W6 |
| donation_goals | server/db/schema.sql:264 | live.db | OpenVibe.Tips | extract | W9 |
| dungeon_stats | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
--| easter_egg_solves | server/db/database.js:1340 | live.db | OpenVibe.AI | extract | W13 |
++| easter_egg_solves | server/db/database.js:1344 | live.db | OpenVibe.AI | extract | W13 |
| emotes | server/db/schema.sql:603 | live.db | OpenVibe.Chat | extract | W6 |
--| emotes_new | server/db/database.js:1709 | no | OpenVibe.Chat | extract | W6 |
++| emotes_new | server/db/database.js:1713 | no | OpenVibe.Chat | extract | W6 |
| event_log | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
| farm_plots | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
| file_checksums | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
@@@ -146,55 +146,55 @@ Deliverable 2: every table declared in code or present in production, with curre
| game_structures | server/game/schema.sql:87 | live.db | OpenVibe.Games | migrate-then-drop | W12 |
| game_world_state | server/game/schema.sql:7 | live.db | OpenVibe.Games | migrate-then-drop | W12 |
| gusher_profile | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
--| hidden_relay_users | server/db/database.js:2112 | live.db | OpenVibe.Chat | extract | W6 |
++| hidden_relay_users | server/db/database.js:2116 | live.db | OpenVibe.Chat | extract | W6 |
| inventory | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
--| ip_log | server/db/database.js:2051 | live.db | OpenVibe.Network (policy) | extract | W1 |
++| ip_log | server/db/database.js:2055 | live.db | OpenVibe.Network (policy) | extract | W1 |
| jo_profile | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
--| kick_channel_cache | server/db/database.js:774 | live.db | OpenRe.Stream | extract | W7 |
++| kick_channel_cache | server/db/database.js:778 | live.db | OpenRe.Stream | extract | W7 |
| linked_accounts | server/db/database.js:384 | live.db | OpenVibe.Network | extract | W1 |
| love_affinity | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
| love_profile | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
| love_proposals | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
--| managed_streams | server/db/database.js:2420, server/db/schema.sql:78 | live.db | OpenRe.Stream | extract | W7 |
--| media_request_settings | server/db/database.js:869, server/db/schema.sql:722 | live.db | OpenVibe.Chat | extract | W6 |
--| media_requests | server/db/database.js:883, server/db/schema.sql:739 | live.db, rs-companion.db | OpenVibe.Chat | extract | W6 |
++| managed_streams | server/db/database.js:2424, server/db/schema.sql:78 | live.db | OpenRe.Stream | extract | W7 |
++| media_request_settings | server/db/database.js:873, server/db/schema.sql:722 | live.db | OpenVibe.Chat | extract | W6 |
++| media_requests | server/db/database.js:887, server/db/schema.sql:739 | live.db, rs-companion.db | OpenVibe.Chat | extract | W6 |
| mine_profile | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
| mod_persuasion | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
--| moderation_actions | server/db/database.js:1920 | live.db | OpenVibe.Chat | extract | W6 |
++| moderation_actions | server/db/database.js:1924 | live.db | OpenVibe.Chat | extract | W6 |
| music_profile | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
| news_settings | server/news/news-service.js:47 | live.db | OpenVibe.Live | keep | - |
--| paste_comments | server/db/database.js:2008 | live.db | OpenVibe.Community | frozen-legacy | W5 |
--| paste_likes | server/db/database.js:1976 | live.db | OpenVibe.Community | frozen-legacy | W5 |
--| pastes | server/db/database.js:1939 | live.db | OpenVibe.Community | frozen-legacy | W5 |
--| payment_orders | server/db/database.js:1588 | live.db | OpenVibe.Billing | extract | W8 (after ADR-012) |
--| pending_ip_messages | server/db/database.js:2092 | live.db | OpenVibe.Chat | extract | W6 |
--| platform_connections | server/db/database.js:709 | live.db | OpenRe.Stream | extract | W7 |
--| powerchat_connections | server/db/database.js:731 | live.db | OpenVibe.Live | keep | W3 (deliveries -> Events) |
--| powerchat_webhook_deliveries | server/db/database.js:748 | live.db | OpenVibe.Live | keep | W3 (deliveries -> Events) |
++| paste_comments | server/db/database.js:2012 | live.db | OpenVibe.Community | frozen-legacy | W5 |
++| paste_likes | server/db/database.js:1980 | live.db | OpenVibe.Community | frozen-legacy | W5 |
++| pastes | server/db/database.js:1943 | live.db | OpenVibe.Community | frozen-legacy | W5 |
++| payment_orders | server/db/database.js:1592 | live.db | OpenVibe.Billing | extract | W8 (after ADR-012) |
++| pending_ip_messages | server/db/database.js:2096 | live.db | OpenVibe.Chat | extract | W6 |
++| platform_connections | server/db/database.js:713 | live.db | OpenRe.Stream | extract | W7 |
++| powerchat_connections | server/db/database.js:735 | live.db | OpenVibe.Live | keep | W3 (deliveries -> Events) |
++| powerchat_webhook_deliveries | server/db/database.js:752 | live.db | OpenVibe.Live | keep | W3 (deliveries -> Events) |
| promo_claims | (prod only) | live.db | archive then drop | investigate | W0 |
--| relay_users | server/db/database.js:1466 | live.db | OpenVibe.Chat | extract | W6 |
--| restream_destinations | server/db/database.js:691 | live.db | OpenRe.Stream | extract | W7 |
++| relay_users | server/db/database.js:1470 | live.db | OpenVibe.Chat | extract | W6 |
++| restream_destinations | server/db/database.js:695 | live.db | OpenRe.Stream | extract | W7 |
| roast_dossier | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
| roast_log | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
--| robotstreamer_integrations | server/db/database.js:605, server/db/schema.sql:58 | live.db | OpenRe.Stream | extract | W7 |
--| robotstreamer_integrations_new | server/db/database.js:656 | no | OpenRe.Stream | extract | W7 |
++| robotstreamer_integrations | server/db/database.js:609, server/db/schema.sql:58 | live.db | OpenRe.Stream | extract | W7 |
++| robotstreamer_integrations_new | server/db/database.js:660 | no | OpenRe.Stream | extract | W7 |
| schema_migrations | server/db/migrations.js:27 | live.db | OpenVibe.Live | keep | - |
| site_settings | server/db/database.js:353, server/db/schema.sql:556 | live.db | OpenVibe.Live | keep | - |
| stream_analytics | server/db/schema.sql:810 | live.db | OpenVibe.Live | keep | - |
| stream_controls | server/db/schema.sql:372 | live.db | OpenRe.Stream | extract | W7 |
--| stream_controls_new | server/db/database.js:2385 | no | OpenRe.Stream | extract | W7 |
--| stream_first_chats | server/db/database.js:2040 | live.db | OpenVibe.Chat | extract | W6 |
--| stream_memories | server/db/database.js:1181 | live.db | OpenVibe.AI | extract | W13 |
++| stream_controls_new | server/db/database.js:2389 | no | OpenRe.Stream | extract | W7 |
++| stream_first_chats | server/db/database.js:2044 | live.db | OpenVibe.Chat | extract | W6 |
++| stream_memories | server/db/database.js:1185 | live.db | OpenVibe.AI | extract | W13 |
| stream_recaps | server/recap/recap.js:27 | live.db | OpenVibe.AI | extract | W13 |
--| stream_timeline_events | server/db/database.js:1229 | live.db | OpenVibe.Live | keep | - |
--| streamer_overviews | server/db/database.js:1274 | live.db | OpenVibe.AI | extract | W13 |
++| stream_timeline_events | server/db/database.js:1233 | live.db | OpenVibe.Live | keep | - |
++| streamer_overviews | server/db/database.js:1278 | live.db | OpenVibe.AI | extract | W13 |
| streams | server/db/schema.sql:103 | live.db | OpenVibe.Live | keep | - |
| subscriptions | server/db/schema.sql:234 | live.db | OpenVibe.Billing + OpenVibe.VIP | extract | W8/W10 |
| tag_guardian_defeats | server/game/tags.js:81 | live.db | OpenVibe.Live | keep | - |
| themes | server/db/schema.sql:446 | live.db | OpenVibe.Network | extract | W1 |
| transactions | server/db/schema.sql:247 | live.db | OpenVibe.Billing | extract | W8 (after ADR-012) |
--| translations | server/db/database.js:506, server/i18n/translate.js:145 | live.db | OpenVibe.AI | extract | W13 |
--| tts_voice_overrides | server/db/database.js:1352 | live.db | OpenVibe.Chat | extract | W6 |
++| translations | server/db/database.js:510, server/i18n/translate.js:145 | live.db | OpenVibe.AI | extract | W13 |
++| tts_voice_overrides | server/db/database.js:1356 | live.db | OpenVibe.Chat | extract | W6 |
| unlocked_recipes | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
| user_cosmetics | server/db/schema.sql:774, server/monetization/cosmetics.js:109 | live.db | OpenVibe.Billing (loyalty ledger) | extract | W8 (after ADR-012) |
| user_equipped | server/db/schema.sql:786, server/monetization/cosmetics.js:118 | live.db | OpenVibe.Billing (loyalty ledger) | extract | W8 (after ADR-012) |
@@@ -206,9 +206,9 @@ Deliverable 2: every table declared in code or present in production, with curre
| user_voices | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
| users | server/db/schema.sql:5 | live.db, rs-companion.db | OpenVibe.Network | extract | W1 |
| verification_keys | server/db/database.js:364, server/db/schema.sql:567 | live.db | OpenVibe.Network | extract | W1 |
--| vibe_coding_events | server/db/database.js:2677, server/db/schema.sql:198 | live.db | OpenVibe.Codes | extract | W20 |
--| vibe_coding_sessions | server/db/database.js:2642, server/db/schema.sql:170 | live.db | OpenVibe.Codes | extract | W20 |
--| viewer_samples | server/db/database.js:3956 | live.db | OpenVibe.Live | keep | - |
++| vibe_coding_events | server/db/database.js:2681, server/db/schema.sql:198 | live.db | OpenVibe.Codes | extract | W20 |
++| vibe_coding_sessions | server/db/database.js:2646, server/db/schema.sql:170 | live.db | OpenVibe.Codes | extract | W20 |
++| viewer_samples | server/db/database.js:3960 | live.db | OpenVibe.Live | keep | - |
| viewer_snapshots | server/db/schema.sql:799 | live.db | OpenVibe.Live | keep | - |
| vod_ai_state | server/db/database.js:263 | live.db | OpenVibe.AI | extract | W13 |
| vods | server/db/schema.sql:280 | live.db | OpenVibe.Media | frozen-legacy | W4 |
@@@ -216,7 +216,7 @@ Deliverable 2: every table declared in code or present in production, with curre
| watch_time | server/db/schema.sql:706 | live.db | OpenVibe.Live | keep | - |
| woodcut_profile | (prod only) | rs-companion.db | OpenVibe.Games (import source) | frozen-legacy | W12 |
--## OpenVibe.Network (35)
++## OpenVibe.Network (36)
| Table | Declared at | In prod | Target owner | Disposition | Wave |
|---|---|---|---|---|---|
@@@ -232,8 +232,9 @@ Deliverable 2: every table declared in code or present in production, with curre
| chrome_hits | server/chrome/service.js:29 | network.db | OpenVibe.Network | keep | W1 (module split) |
| coin_transactions | server/db/database.js:407 | network.db | OpenVibe.Billing (loyalty ledger) | extract | W8 (after ADR-012) |
| email_delivery_log | server/db/database.js:302 | network.db | OpenVibe.Network | keep | W3 (delivery -> Events outbox) |
--| email_verification_tokens | server/db/database.js:506 | network.db | OpenVibe.Network | keep | W1 (module split) |
++| email_verification_tokens | server/db/database.js:509 | network.db | OpenVibe.Network | keep | W1 (module split) |
| follows | server/db/database.js:386 | network.db | OpenVibe.Network | keep | W1 (module split) |
++| identity_legacy_map | server/identity/subjects.js:25 | network.db | OpenVibe.Network | keep | W1 (module split) |
| ip_log | server/db/database.js:225 | network.db | OpenVibe.Network | keep | W1 (module split) |
| linked_accounts | server/db/database.js:204 | network.db | OpenVibe.Network | keep | W1 (module split) |
| notification_preferences | server/db/database.js:290 | network.db | OpenVibe.Network | keep | W1 (module split) |
@@@ -244,7 +245,7 @@ Deliverable 2: every table declared in code or present in production, with curre
| password_reset_tokens | server/db/database.js:321 | network.db | OpenVibe.Network | keep | W1 (module split) |
| push_subscriptions | server/db/database.js:460 | network.db | OpenVibe.Network | keep | W3 (delivery -> Events outbox) |
| site_settings | server/db/database.js:238 | network.db | OpenVibe.Network | keep | - |
--| stream_live_announcements | server/internal/routes.js:300 | network.db | OpenVibe.Events | extract | W3 |
++| stream_live_announcements | server/internal/routes.js:310 | network.db | OpenVibe.Events | extract | W3 |
| themes | server/db/database.js:183 | network.db | OpenVibe.Network | keep | W1 (module split) |
| tool_domains | server/domains/routes.js:44 | network.db | OpenVibe.Network | keep | W1 (module split) |
| url_registry | server/db/database.js:245, server/url-registry.js:7 | network.db | OpenVibe.Network | keep | W1 (module split) |
ddiff --git a/docs/roadmap-baseline/03-routes.md b/docs/roadmap-baseline/03-routes.md
iindex 8f42f580..513eb6b4 100644
---- a/docs/roadmap-baseline/03-routes.md
++++ b/docs/roadmap-baseline/03-routes.md
@@@ -9,7 +9,7 @@ Deliverable 3 (routes half). Paths include the prefix of the `app.use()` mount t
| Repo | Routes | GET | POST | PUT/PATCH | DELETE | Other | /internal/* |
|---|---|---|---|---|---|---|---|
| OpenVibe.Live | 532 | 274 | 160 | 50 | 47 | 1 | 6 |
--| OpenVibe.Network | 185 | 80 | 69 | 22 | 14 | 0 | 25 |
++| OpenVibe.Network | 187 | 81 | 70 | 22 | 14 | 0 | 27 |
| OpenVibe.Media | 67 | 28 | 27 | 4 | 8 | 0 | 1 |
| OpenVibe.Tools | 99 | 84 | 12 | 0 | 2 | 1 | 0 |
| OpenVibe.Community | 22 | 19 | 3 | 0 | 0 | 0 | 0 |
@@@ -574,12 +574,12 @@ Deliverable 3 (routes half). Paths include the prefix of the `app.use()` mount t
| GET | /api/admin/domains/catalog | server/domains/routes.js:206 |
| POST | /api/admin/domains/check | server/domains/routes.js:217 |
| GET | /api/admin/ssh-info | server/index.js:452 |
--| GET | /api/auth/anon-identities | server/auth/routes.js:635 |
--| POST | /api/auth/anon-session | server/auth/routes.js:512 |
--| GET | /api/auth/anon/:token | server/auth/routes.js:582 |
--| POST | /api/auth/anon/:token/link | server/auth/routes.js:619 |
--| PUT | /api/auth/anon/:token/preferences | server/auth/routes.js:596 |
--| POST | /api/auth/change-password | server/auth/routes.js:422 |
++| GET | /api/auth/anon-identities | server/auth/routes.js:638 |
++| POST | /api/auth/anon-session | server/auth/routes.js:515 |
++| GET | /api/auth/anon/:token | server/auth/routes.js:585 |
++| POST | /api/auth/anon/:token/link | server/auth/routes.js:622 |
++| PUT | /api/auth/anon/:token/preferences | server/auth/routes.js:599 |
++| POST | /api/auth/change-password | server/auth/routes.js:425 |
| GET | /api/auth/discord/callback | server/auth/discord-link.js:61 |
| DELETE | /api/auth/discord/link | server/auth/discord-link.js:158 |
| GET | /api/auth/discord/link | server/auth/discord-link.js:31 |
@@@ -587,22 +587,22 @@ Deliverable 3 (routes half). Paths include the prefix of the `app.use()` mount t
| POST | /api/auth/email/send-verification | server/auth/email-verify.js:99 |
| GET | /api/auth/email/status | server/auth/email-verify.js:83 |
| POST | /api/auth/email/verify | server/auth/email-verify.js:122 |
--| POST | /api/auth/forgot-password | server/auth/routes.js:206 |
--| POST | /api/auth/login | server/auth/routes.js:183 |
--| POST | /api/auth/logout | server/auth/routes.js:506 |
--| GET | /api/auth/me | server/auth/routes.js:362 |
--| PUT | /api/auth/profile | server/auth/routes.js:372 |
--| POST | /api/auth/refresh | server/auth/routes.js:300 |
--| POST | /api/auth/register | server/auth/routes.js:88 |
--| POST | /api/auth/reset-password | server/auth/routes.js:254 |
--| GET | /api/auth/reset-password/validate | server/auth/routes.js:238 |
--| DELETE | /api/auth/sessions | server/auth/routes.js:717 |
--| GET | /api/auth/sessions | server/auth/routes.js:673 |
--| POST | /api/auth/sessions | server/auth/routes.js:686 |
--| DELETE | /api/auth/sessions/:id | server/auth/routes.js:708 |
--| GET | /api/auth/users/:id/card | server/auth/routes.js:728 |
--| DELETE | /api/auth/users/:id/follow | server/auth/routes.js:811 |
--| POST | /api/auth/users/:id/follow | server/auth/routes.js:780 |
++| POST | /api/auth/forgot-password | server/auth/routes.js:208 |
++| POST | /api/auth/login | server/auth/routes.js:185 |
++| POST | /api/auth/logout | server/auth/routes.js:509 |
++| GET | /api/auth/me | server/auth/routes.js:364 |
++| PUT | /api/auth/profile | server/auth/routes.js:375 |
++| POST | /api/auth/refresh | server/auth/routes.js:302 |
++| POST | /api/auth/register | server/auth/routes.js:90 |
++| POST | /api/auth/reset-password | server/auth/routes.js:256 |
++| GET | /api/auth/reset-password/validate | server/auth/routes.js:240 |
++| DELETE | /api/auth/sessions | server/auth/routes.js:720 |
++| GET | /api/auth/sessions | server/auth/routes.js:676 |
++| POST | /api/auth/sessions | server/auth/routes.js:689 |
++| DELETE | /api/auth/sessions/:id | server/auth/routes.js:711 |
++| GET | /api/auth/users/:id/card | server/auth/routes.js:731 |
++| DELETE | /api/auth/users/:id/follow | server/auth/routes.js:814 |
++| POST | /api/auth/users/:id/follow | server/auth/routes.js:783 |
| GET | /api/brand | server/index.js:373 |
| GET | /api/catalog.json | server/index.js:423 |
| GET | /api/chrome | server/chrome/service.js:137 |
@@@ -664,31 +664,33 @@ Deliverable 3 (routes half). Paths include the prefix of the `app.use()` mount t
| POST | /fedcm/disconnect | server/auth/fedcm.js:142 |
| GET | /health | server/admin/routes.js:766 |
| POST | /identity | server/setup/routes.js:152 |
--| GET | /internal/anon-admin | server/internal/routes.js:618 |
--| GET | /internal/anon-list | server/internal/routes.js:667 |
--| POST | /internal/audit | server/internal/routes.js:156 |
--| POST | /internal/coins/credit | server/internal/routes.js:242 |
--| POST | /internal/coins/debit | server/internal/routes.js:254 |
--| GET | /internal/coins/stats | server/internal/routes.js:204 |
--| POST | /internal/coins/transfer | server/internal/routes.js:267 |
--| POST | /internal/events/stream-live | server/internal/routes.js:284 |
--| POST | /internal/issue-token | server/internal/routes.js:508 |
--| POST | /internal/link-account | server/internal/routes.js:107 |
--| POST | /internal/notifications/mark-read | server/internal/routes.js:469 |
--| POST | /internal/notifications/push | server/internal/routes.js:411 |
--| POST | /internal/notifications/push-bulk | server/internal/routes.js:431 |
--| POST | /internal/notifications/resolve-users | server/internal/routes.js:488 |
--| GET | /internal/notifications/unread/:userId | server/internal/routes.js:454 |
--| POST | /internal/resolve-anon | server/internal/routes.js:539 |
--| GET | /internal/stats | server/internal/routes.js:165 |
--| GET | /internal/url-registry/resolved | server/internal/routes.js:174 |
--| POST | /internal/user-avatar | server/internal/routes.js:141 |
--| GET | /internal/users/:id | server/internal/routes.js:58 |
--| GET | /internal/users/:id/linked-accounts | server/internal/routes.js:149 |
--| GET | /internal/users/:id/theme | server/internal/routes.js:95 |
--| POST | /internal/users/bulk | server/internal/routes.js:80 |
--| GET | /internal/users/by-username/:username | server/internal/routes.js:69 |
--| POST | /internal/verify-token | server/internal/routes.js:36 |
++| GET | /internal/anon-admin | server/internal/routes.js:628 |
++| GET | /internal/anon-list | server/internal/routes.js:677 |
++| POST | /internal/audit | server/internal/routes.js:166 |
++| POST | /internal/coins/credit | server/internal/routes.js:252 |
++| POST | /internal/coins/debit | server/internal/routes.js:264 |
++| GET | /internal/coins/stats | server/internal/routes.js:214 |
++| POST | /internal/coins/transfer | server/internal/routes.js:277 |
++| POST | /internal/events/stream-live | server/internal/routes.js:294 |
++| POST | /internal/identity/legacy-map | server/identity/internal-routes.js:29 |
++| GET | /internal/identity/resolve | server/identity/internal-routes.js:18 |
++| POST | /internal/issue-token | server/internal/routes.js:518 |
++| POST | /internal/link-account | server/internal/routes.js:108 |
++| POST | /internal/notifications/mark-read | server/internal/routes.js:479 |
++| POST | /internal/notifications/push | server/internal/routes.js:421 |
++| POST | /internal/notifications/push-bulk | server/internal/routes.js:441 |
++| POST | /internal/notifications/resolve-users | server/internal/routes.js:498 |
++| GET | /internal/notifications/unread/:userId | server/internal/routes.js:464 |
++| POST | /internal/resolve-anon | server/internal/routes.js:549 |
++| GET | /internal/stats | server/internal/routes.js:175 |
++| GET | /internal/url-registry/resolved | server/internal/routes.js:184 |
++| POST | /internal/user-avatar | server/internal/routes.js:151 |
++| GET | /internal/users/:id | server/internal/routes.js:59 |
++| GET | /internal/users/:id/linked-accounts | server/internal/routes.js:159 |
++| GET | /internal/users/:id/theme | server/internal/routes.js:96 |
++| POST | /internal/users/bulk | server/internal/routes.js:81 |
++| GET | /internal/users/by-username/:username | server/internal/routes.js:70 |
++| POST | /internal/verify-token | server/internal/routes.js:37 |
| GET | /llms.txt | server/index.js:550 |
| GET | /me | server/coins/routes.js:18 |
| GET | /me/history | server/coins/routes.js:24 |
@@@ -700,10 +702,10 @@ Deliverable 3 (routes half). Paths include the prefix of the `app.use()` mount t
| GET | /nginx/preview/:serviceId | server/deploy/routes.js:314 |
| POST | /nginx/reload | server/deploy/routes.js:382 |
| POST | /nginx/validate | server/deploy/routes.js:330 |
--| GET | /oauth/.well-known/openid-configuration | server/auth/oauth-routes.js:304 |
--| GET | /oauth/authorize | server/auth/oauth-routes.js:20 |
--| POST | /oauth/confirm | server/auth/oauth-routes.js:78 |
--| POST | /oauth/token | server/auth/oauth-routes.js:131 |
++| GET | /oauth/.well-known/openid-configuration | server/auth/oauth-routes.js:306 |
++| GET | /oauth/authorize | server/auth/oauth-routes.js:21 |
++| POST | /oauth/confirm | server/auth/oauth-routes.js:79 |
++| POST | /oauth/token | server/auth/oauth-routes.js:132 |
| GET | /openvibe-sw.js | server/index.js:596 |
| GET | /overview | server/admin/analytics-routes.js:75 |
| GET | /preferences | server/notifications/routes.js:121 |
ddiff --git a/docs/roadmap-baseline/07-ownership.md b/docs/roadmap-baseline/07-ownership.md
iindex c1b701e8..c81cd9e3 100644
---- a/docs/roadmap-baseline/07-ownership.md
++++ b/docs/roadmap-baseline/07-ownership.md
@@@ -9,7 +9,7 @@ Deliverable 6. Current owner = the repo that creates the table; target owner = r
| Current owner | Tables | Stay | Move | Frozen legacy | Investigate |
|---|---|---|---|---|---|
| OpenVibe.Live | 186 | 26 | 94 | 43 | 23 |
--| OpenVibe.Network | 35 | 32 | 3 | 0 | 0 |
++| OpenVibe.Network | 36 | 33 | 3 | 0 | 0 |
| OpenVibe.Media | 15 | 12 | 3 | 0 | 0 |
| OpenVibe.Tools | 4 | 4 | 0 | 0 | 0 |
| OpenVibe.Community | 4 | 4 | 0 | 0 | 0 |
ddiff --git a/docs/roadmap-baseline/08-discrepancies.md b/docs/roadmap-baseline/08-discrepancies.md
iindex 17b3d216..2ac9a0eb 100644
---- a/docs/roadmap-baseline/08-discrepancies.md
++++ b/docs/roadmap-baseline/08-discrepancies.md
@@@ -2,7 +2,7 @@
> Generated by `scripts/roadmap-baseline/generate.js`. Do not edit by hand; edit `data/*.json` or the extractor and regenerate.
--Deliverable 7. Snapshot of openvibe-oregon taken 2026-09-22 20:43 UTC compared with the local checkouts. `unknown` rows are things this environment cannot see.
++Deliverable 7. Snapshot of openvibe-oregon taken 2026-09-22 21:23 UTC compared with the local checkouts. `unknown` rows are things this environment cannot see.
| Severity | Area | Subject | Detail |
|---|---|---|---|
ddiff --git a/docs/roadmap-baseline/09-d-status.md b/docs/roadmap-baseline/09-d-status.md
iindex d7d0b50a..0b9e1e4d 100644
---- a/docs/roadmap-baseline/09-d-status.md
++++ b/docs/roadmap-baseline/09-d-status.md
@@@ -7,7 +7,7 @@ Deliverable 8. Family-level status from roadmap 3.2. Evidence paths are checked
| IDs | Family | Status | Disposition | Wave | Evidence | Measured |
|---|---|---|---|---|---|---|
| D01 | Identity/account | partial | partial | W1 | Network/server/auth; Community/server/live-client.js | 7 Live tables target OpenVibe.Network |
--| D02-D04 | Registry, capabilities, contracts | absent | missing | W1, W2 | Network/server/url-registry.js; Sites/sites.json | 21 charter-only repos of 32; Live 15, Network 0, Media 0, Tools 0, Community 0, Games 0, Sites 0 |
++| D02-D04 | Registry, capabilities, contracts | absent | missing | W1, W2 | Network/server/url-registry.js; Sites/sites.json | 20 charter-only repos of 32; Live 15, Network 0, Media 0, Tools 0, Community 0, Games 0, Sites 0 |
| D05-D06 | Policy, staff, user modules | partial | partial | W1, W2 | Network/server/admin; Live/server/auth/permissions.js | - |
| D07-D10 | Themes, notifications, social, analytics | partial | partial | W1, W2, Track O | Network/server/themes; Network/server/notifications | 5 repos carry their own analytics_events |
| D11-D13 | Events, realtime, SDK | absent | missing | W2, W3 | Media/server/webhooks.js | 65 caller-file/target pairs across 50 files; 10 WebSocket server constructions |
@@@ -18,7 +18,7 @@ Deliverable 8. Family-level status from roadmap 3.2. Evidence paths are checked
| D28-D30 | Billing, Tips, VIP | partial | partial | W8-W10 (ADR-012 first) | Live/server/monetization/payments.js; Network/server/coins | 2 Live tables target OpenVibe.Billing; 2 Network tables target OpenVibe.Billing (loyalty ledger) |
| D31 | Tools | built | already-present-and-verified | W11 | Tools/apps/gateway | 2 test files |
| D32 | Games | built | already-present-and-verified | W12 | Games/apps/server/src/net/sso.ts | 56 test files |
--| D33-D34 | Codes, Host | absent | missing | W20, W21 | - | 21 charter-only repos of 32 |
++| D33-D34 | Codes, Host | absent | missing | W20, W21 | - | 20 charter-only repos of 32 |
| D35-D38 | AI, content, sources, search | partial | partial | W13-W15 | Live/server/ai/moment-registry.js; Live/server/ai/llm.js | 14 Live tables target OpenVibe.AI |
| D39 | Mods | absent | missing | W12, W21 | - | - |
| D40 | Open developer services | absent | missing | W20, W21 | Live/server/integrations/powerchat-routes.js | 28 of 65 call sites authenticate with the shared internal key |
ddiff --git a/docs/roadmap-baseline/README.md b/docs/roadmap-baseline/README.md
iindex cecddb85..b0936fa3 100644
---- a/docs/roadmap-baseline/README.md
++++ b/docs/roadmap-baseline/README.md
@@@ -2,15 +2,15 @@
The audit baseline from the OpenVibe development roadmap (Wave 0; section 12 items 1-3): what exists across the estate, who owns each piece of data today and who should, what production looks like next to the repos, and which hazards constrain later waves. Every file here except `data/*.json` is generated.
--Source commits: Live `e31e342`, Network `71be248`, Media `6114bc6`, Tools `0346edc`, Community `de947ea`, Games `5710287`, Sites `185014f`. Production snapshot: openvibe-oregon, 2026-09-22.
++Source commits: Live `24151bd`, Network `9b4e262`, Media `6114bc6`, Tools `0346edc`, Community `de947ea`, Games `5710287`, Sites `185014f`. Production snapshot: openvibe-oregon, 2026-09-22.
## Deliverables
| # | Artifact | Contents |
|---|---|---|
| 1 | [01-services.md](01-services.md) | services, ports, units, env files, repo state, GitHub census |
--| 2 | [02-schema.md](02-schema.md) | 249 tables with current/target owner |
--| 3 | [03-routes.md](03-routes.md), [04-cross-service.md](04-cross-service.md) | 926 routes; 65 cross-service call sites |
++| 2 | [02-schema.md](02-schema.md) | 250 tables with current/target owner |
++| 3 | [03-routes.md](03-routes.md), [04-cross-service.md](04-cross-service.md) | 928 routes; 65 cross-service call sites |
| 4 | [05-realtime-and-jobs.md](05-realtime-and-jobs.md) | WebSocket servers and paths, non-HTTP protocols, background jobs |
| 5 | [06-secrets.md](06-secrets.md) | auth mechanisms and secret names (no values) |
| 6 | [07-ownership.md](07-ownership.md) | current vs target data ownership |
@@@ -23,8 +23,8 @@ Source commits: Live `e31e342`, Network `71be248`, Media `6114bc6`, Tools `0346e
| | Criterion | Result |
|---|---|---|
--| pass | Every table has an owner classification | 249 tables classified, 0 unclassified |
--| pass | Every route is attributed to a repo and source line | 926 routes; 0 router mounts whose module could not be resolved (their routes are listed without the mount prefix) |
++| pass | Every table has an owner classification | 250 tables classified, 0 unclassified |
++| pass | Every route is attributed to a repo and source line | 928 routes; 0 router mounts whose module could not be resolved (their routes are listed without the mount prefix) |
| pass | Every background job is listed with its location | 82 timers/jobs |
| pass | Every cross-service call records caller, callee, auth, timeout and retry | 65 call sites; 30 with no timeout detected |
| pass | Unknowns are marked unknown, not guessed | 2 unknown items recorded |
ddiff --git a/docs/roadmap-baseline/inventory.json b/docs/roadmap-baseline/inventory.json
iindex 495d76c9..81a42a05 100644
---- a/docs/roadmap-baseline/inventory.json
++++ b/docs/roadmap-baseline/inventory.json
@@@ -1,7 +1,7 @@
{
"generatedFrom": {
-- "OpenVibe.Live": "e31e3422db7e3846051aeeb07fa661b8812c123d",
-- "OpenVibe.Network": "71be248264060ca6d30d083571928f9a10002688",
++ "OpenVibe.Live": "24151bdc12ffe6e6f2fbe8c3770327b2d1635a8a",
++ "OpenVibe.Network": "9b4e262cd8daf05ee2b6b92a06dabe70e2d42bc7",
"OpenVibe.Media": "6114bc61c466cd51335548d0ce87058df125c577",
"OpenVibe.Tools": "0346edc57fb9f588abcdea171a22a5ca33f772d2",
"OpenVibe.Community": "de947ead2addce29d7f9b98f3d894075ca4e82f2",
@@@ -10,7 +10,7 @@
},
"prodSnapshot": {
"host": "openvibe-oregon",
-- "collectedAt": "2026-09-22T20:43:28.028Z"
++ "collectedAt": "2026-09-22T21:23:31.121Z"
},
"repos": [
{
@@@ -18,13 +18,13 @@
"service": "live",
"present": true,
"git": {
-- "head": "e31e3422db7e3846051aeeb07fa661b8812c123d",
++ "head": "24151bdc12ffe6e6f2fbe8c3770327b2d1635a8a",
"branch": "main",
-- "originMain": "e31e3422db7e3846051aeeb07fa661b8812c123d",
-- "committedAt": "2026-09-21T12:34:30-07:00"
++ "originMain": "24151bdc12ffe6e6f2fbe8c3770327b2d1635a8a",
++ "committedAt": "2026-09-22T14:18:25-07:00"
},
-- "sourceFiles": 164,
-- "loc": 69622,
++ "sourceFiles": 165,
++ "loc": 69699,
"tables": [
{
"table": "arena_profiles",
@@@ -125,319 +125,319 @@
{
"table": "chat_messages_new",
"file": "server/db/database.js",
-- "line": 415,
++ "line": 419,
"via": "repo"
},
{
"table": "translations",
"file": "server/db/database.js",
-- "line": 506,
++ "line": 510,
"via": "repo"
},
{
"table": "robotstreamer_integrations",
"file": "server/db/database.js",
-- "line": 605,
++ "line": 609,
"via": "repo"
},
{
"table": "robotstreamer_integrations_new",
"file": "server/db/database.js",
-- "line": 656,
++ "line": 660,
"via": "repo"
},
{
"table": "restream_destinations",
"file": "server/db/database.js",
-- "line": 691,
++ "line": 695,
"via": "repo"
},
{
"table": "platform_connections",
"file": "server/db/database.js",
-- "line": 709,
++ "line": 713,
"via": "repo"
},
{
"table": "powerchat_connections",
"file": "server/db/database.js",
-- "line": 731,
++ "line": 735,
"via": "repo"
},
{
"table": "powerchat_webhook_deliveries",
"file": "server/db/database.js",
-- "line": 748,
++ "line": 752,
"via": "repo"
},
{
"table": "channel_points",
"file": "server/db/database.js",
-- "line": 760,
++ "line": 764,
"via": "repo"
},
{
"table": "kick_channel_cache",
"file": "server/db/database.js",
-- "line": 774,
++ "line": 778,
"via": "repo"
},
{
"table": "comments",
"file": "server/db/database.js",
-- "line": 849,
++ "line": 853,
"via": "repo"
},
{
"table": "media_request_settings",
"file": "server/db/database.js",
-- "line": 869,
++ "line": 873,
"via": "repo"
},
{
"table": "media_requests",
"file": "server/db/database.js",
-- "line": 883,
++ "line": 887,
"via": "repo"
},
{
"table": "anon_ip_mappings",
"file": "server/db/database.js",
-- "line": 936,
++ "line": 940,
"via": "repo"
},
{
"table": "app_state",
"file": "server/db/database.js",
-- "line": 1167,
++ "line": 1171,
"via": "repo"
},
{
"table": "stream_memories",
"file": "server/db/database.js",
-- "line": 1181,
++ "line": 1185,
"via": "repo"
},
{
"table": "stream_timeline_events",
"file": "server/db/database.js",
-- "line": 1229,
++ "line": 1233,
"via": "repo"
},
{
"table": "ai_usage",
"file": "server/db/database.js",
-- "line": 1254,
++ "line": 1258,
"via": "repo"
},
{
"table": "streamer_overviews",
"file": "server/db/database.js",
-- "line": 1274,
++ "line": 1278,
"via": "repo"
},
{
"table": "ai_timeline_cache",
"file": "server/db/database.js",
-- "line": 1296,
++ "line": 1300,
"via": "repo"
},
{
"table": "chat_ai_summaries",
"file": "server/db/database.js",
-- "line": 1308,
++ "line": 1312,
"via": "repo"
},
{
"table": "chat_timeline_events",
"file": "server/db/database.js",
-- "line": 1328,
++ "line": 1332,
"via": "repo"
},
{
"table": "easter_egg_solves",
"file": "server/db/database.js",
-- "line": 1340,
++ "line": 1344,
"via": "repo"
},
{
"table": "tts_voice_overrides",
"file": "server/db/database.js",
-- "line": 1352,
++ "line": 1356,
"via": "repo"
},
{
"table": "relay_users",
"file": "server/db/database.js",
-- "line": 1466,
++ "line": 1470,
"via": "repo"
},
{
"table": "payment_orders",
"file": "server/db/database.js",
-- "line": 1588,
++ "line": 1592,
"via": "repo"
},
{
"table": "channel_moderators",
"file": "server/db/database.js",
-- "line": 1621,
++ "line": 1625,
"via": "repo"
},
{
"table": "channel_moderation_settings",
"file": "server/db/database.js",
-- "line": 1638,
++ "line": 1642,
"via": "repo"
},
{
"table": "emotes_new",
"file": "server/db/database.js",
-- "line": 1709,
++ "line": 1713,
"via": "repo"
},
{
"table": "channel_sounds",
"file": "server/db/database.js",
-- "line": 1741,
++ "line": 1745,
"via": "repo"
},
{
"table": "channel_sounds_new",
"file": "server/db/database.js",
-- "line": 1765,
++ "line": 1769,
"via": "repo"
},
{
"table": "ai_chatbot_configs",
"file": "server/db/database.js",
-- "line": 1803,
++ "line": 1807,
"via": "repo"
},
{
"table": "channel_ai_bots",
"file": "server/db/database.js",
-- "line": 1828,
++ "line": 1832,
"via": "repo"
},
{
"table": "channel_ai_config",
"file": "server/db/database.js",
-- "line": 1852,
++ "line": 1856,
"via": "repo"
},
{
"table": "ai_viewer_threads",
"file": "server/db/database.js",
-- "line": 1873,
++ "line": 1877,
"via": "repo"
},
{
"table": "ai_viewer_log",
"file": "server/db/database.js",
-- "line": 1887,
++ "line": 1891,
"via": "repo"
},
{
"table": "moderation_actions",
"file": "server/db/database.js",
-- "line": 1920,
++ "line": 1924,
"via": "repo"
},
{
"table": "pastes",
"file": "server/db/database.js",
-- "line": 1939,
++ "line": 1943,
"via": "repo"
},
{
"table": "paste_likes",
"file": "server/db/database.js",
-- "line": 1976,
++ "line": 1980,
"via": "repo"
},
{
"table": "paste_comments",
"file": "server/db/database.js",
-- "line": 2008,
++ "line": 2012,
"via": "repo"
},
{
"table": "stream_first_chats",
"file": "server/db/database.js",
-- "line": 2040,
++ "line": 2044,
"via": "repo"
},
{
"table": "ip_log",
"file": "server/db/database.js",
-- "line": 2051,
++ "line": 2055,
"via": "repo"
},
{
"table": "approved_ips",
"file": "server/db/database.js",
-- "line": 2075,
++ "line": 2079,
"via": "repo"
},
{
"table": "pending_ip_messages",
"file": "server/db/database.js",
-- "line": 2092,
++ "line": 2096,
"via": "repo"
},
{
"table": "hidden_relay_users",
"file": "server/db/database.js",
-- "line": 2112,
++ "line": 2116,
"via": "repo"
},
{
"table": "control_whitelist",
"file": "server/db/database.js",
-- "line": 2277,
++ "line": 2281,
"via": "repo"
},
{
"table": "control_configs",
"file": "server/db/database.js",
-- "line": 2292,
++ "line": 2296,
"via": "repo"
},
{
"table": "control_config_buttons",
"file": "server/db/database.js",
-- "line": 2306,
++ "line": 2310,
"via": "repo"
},
{
"table": "stream_controls_new",
"file": "server/db/database.js",
-- "line": 2385,
++ "line": 2389,
"via": "repo"
},
{
"table": "managed_streams",
"file": "server/db/database.js",
-- "line": 2420,
++ "line": 2424,
"via": "repo"
},
{
"table": "vibe_coding_sessions",
"file": "server/db/database.js",
-- "line": 2642,
++ "line": 2646,
"via": "repo"
},
{
"table": "vibe_coding_events",
"file": "server/db/database.js",
-- "line": 2677,
++ "line": 2681,
"via": "repo"
},
{
"table": "viewer_samples",
"file": "server/db/database.js",
-- "line": 3956,
++ "line": 3960,
"via": "repo"
},
{
@@@ -5366,7 +5366,7 @@
],
"contractTodos": 15,
"unresolvedMounts": [],
-- "testFiles": 55,
++ "testFiles": 56,
"ci": false
},
{
@@@ -5374,13 +5374,13 @@
"service": "network",
"present": true,
"git": {
-- "head": "71be248264060ca6d30d083571928f9a10002688",
++ "head": "9b4e262cd8daf05ee2b6b92a06dabe70e2d42bc7",
"branch": "main",
-- "originMain": "71be248264060ca6d30d083571928f9a10002688",
-- "committedAt": "2026-09-21T11:57:37-07:00"
++ "originMain": "9b4e262cd8daf05ee2b6b92a06dabe70e2d42bc7",
++ "committedAt": "2026-09-22T14:14:53-07:00"
},
-- "sourceFiles": 77,
-- "loc": 20399,
++ "sourceFiles": 79,
++ "loc": 20646,
"tables": [
{
"table": "admin_rate_limits",
@@@ -5547,7 +5547,7 @@
{
"table": "email_verification_tokens",
"file": "server/db/database.js",
-- "line": 506,
++ "line": 509,
"via": "repo"
},
{
@@@ -5562,10 +5562,16 @@
"line": 26,
"via": "repo"
},
++ {
++ "table": "identity_legacy_map",
++ "file": "server/identity/subjects.js",
++ "line": 25,
++ "via": "repo"
++ },
{
"table": "stream_live_announcements",
"file": "server/internal/routes.js",
-- "line": 300,
++ "line": 310,
"via": "repo"
},
{
@@@ -5706,37 +5712,37 @@
"method": "GET",
"path": "/api/auth/anon-identities",
"file": "server/auth/routes.js",
-- "line": 635
++ "line": 638
},
{
"method": "POST",
"path": "/api/auth/anon-session",
"file": "server/auth/routes.js",
-- "line": 512
++ "line": 515
},
{
"method": "GET",
"path": "/api/auth/anon/:token",
"file": "server/auth/routes.js",
-- "line": 582
++ "line": 585
},
{
"method": "POST",
"path": "/api/auth/anon/:token/link",
"file": "server/auth/routes.js",
-- "line": 619
++ "line": 622
},
{
"method": "PUT",
"path": "/api/auth/anon/:token/preferences",
"file": "server/auth/routes.js",
-- "line": 596
++ "line": 599
},
{
"method": "POST",
"path": "/api/auth/change-password",
"file": "server/auth/routes.js",
-- "line": 422
++ "line": 425
},
{
"method": "GET",
@@@ -5784,97 +5790,97 @@
"method": "POST",
"path": "/api/auth/forgot-password",
"file": "server/auth/routes.js",
-- "line": 206
++ "line": 208
},
{
"method": "POST",
"path": "/api/auth/login",
"file": "server/auth/routes.js",
-- "line": 183
++ "line": 185
},
{
"method": "POST",
"path": "/api/auth/logout",
"file": "server/auth/routes.js",
-- "line": 506
++ "line": 509
},
{
"method": "GET",
"path": "/api/auth/me",
"file": "server/auth/routes.js",
-- "line": 362
++ "line": 364
},
{
"method": "PUT",
"path": "/api/auth/profile",
"file": "server/auth/routes.js",
-- "line": 372
++ "line": 375
},
{
"method": "POST",
"path": "/api/auth/refresh",
"file": "server/auth/routes.js",
-- "line": 300
++ "line": 302
},
{
"method": "POST",
"path": "/api/auth/register",
"file": "server/auth/routes.js",
-- "line": 88
++ "line": 90
},
{
"method": "POST",
"path": "/api/auth/reset-password",
"file": "server/auth/routes.js",
-- "line": 254
++ "line": 256
},
{
"method": "GET",
"path": "/api/auth/reset-password/validate",
"file": "server/auth/routes.js",
-- "line": 238
++ "line": 240
},
{
"method": "DELETE",
"path": "/api/auth/sessions",
"file": "server/auth/routes.js",
-- "line": 717
++ "line": 720
},
{
"method": "GET",
"path": "/api/auth/sessions",
"file": "server/auth/routes.js",
-- "line": 673
++ "line": 676
},
{
"method": "POST",
"path": "/api/auth/sessions",
"file": "server/auth/routes.js",
-- "line": 686
++ "line": 689
},
{
"method": "DELETE",
"path": "/api/auth/sessions/:id",
"file": "server/auth/routes.js",
-- "line": 708
++ "line": 711
},
{
"method": "GET",
"path": "/api/auth/users/:id/card",
"file": "server/auth/routes.js",
-- "line": 728
++ "line": 731
},
{
"method": "DELETE",
"path": "/api/auth/users/:id/follow",
"file": "server/auth/routes.js",
-- "line": 811
++ "line": 814
},
{
"method": "POST",
"path": "/api/auth/users/:id/follow",
"file": "server/auth/routes.js",
-- "line": 780
++ "line": 783
},
{
"method": "GET",
@@@ -6246,151 +6252,163 @@
"method": "GET",
"path": "/internal/anon-admin",
"file": "server/internal/routes.js",
-- "line": 618
++ "line": 628
},
{
"method": "GET",
"path": "/internal/anon-list",
"file": "server/internal/routes.js",
-- "line": 667
++ "line": 677
},
{
"method": "POST",
"path": "/internal/audit",
"file": "server/internal/routes.js",
-- "line": 156
++ "line": 166
},
{
"method": "POST",
"path": "/internal/coins/credit",
"file": "server/internal/routes.js",
-- "line": 242
++ "line": 252
},
{
"method": "POST",
"path": "/internal/coins/debit",
"file": "server/internal/routes.js",
-- "line": 254
++ "line": 264
},
{
"method": "GET",
"path": "/internal/coins/stats",
"file": "server/internal/routes.js",
-- "line": 204
++ "line": 214
},
{
"method": "POST",
"path": "/internal/coins/transfer",
"file": "server/internal/routes.js",
-- "line": 267
++ "line": 277
},
{
"method": "POST",
"path": "/internal/events/stream-live",
"file": "server/internal/routes.js",
-- "line": 284
++ "line": 294
++ },
++ {
++ "method": "POST",
++ "path": "/internal/identity/legacy-map",
++ "file": "server/identity/internal-routes.js",
++ "line": 29
++ },
++ {
++ "method": "GET",
++ "path": "/internal/identity/resolve",
++ "file": "server/identity/internal-routes.js",
++ "line": 18
},
{
"method": "POST",
"path": "/internal/issue-token",
"file": "server/internal/routes.js",
-- "line": 508
++ "line": 518
},
{
"method": "POST",
"path": "/internal/link-account",
"file": "server/internal/routes.js",
-- "line": 107
++ "line": 108
},
{
"method": "POST",
"path": "/internal/notifications/mark-read",
"file": "server/internal/routes.js",
-- "line": 469
++ "line": 479
},
{
"method": "POST",
"path": "/internal/notifications/push",
"file": "server/internal/routes.js",
-- "line": 411
++ "line": 421
},
{
"method": "POST",
"path": "/internal/notifications/push-bulk",
"file": "server/internal/routes.js",
-- "line": 431
++ "line": 441
},
{
"method": "POST",
"path": "/internal/notifications/resolve-users",
"file": "server/internal/routes.js",
-- "line": 488
++ "line": 498
},
{
"method": "GET",
"path": "/internal/notifications/unread/:userId",
"file": "server/internal/routes.js",
-- "line": 454
++ "line": 464
},
{
"method": "POST",
"path": "/internal/resolve-anon",
"file": "server/internal/routes.js",
-- "line": 539
++ "line": 549
},
{
"method": "GET",
"path": "/internal/stats",
"file": "server/internal/routes.js",
-- "line": 165
++ "line": 175
},
{
"method": "GET",
"path": "/internal/url-registry/resolved",
"file": "server/internal/routes.js",
-- "line": 174
++ "line": 184
},
{
"method": "POST",
"path": "/internal/user-avatar",
"file": "server/internal/routes.js",
-- "line": 141
++ "line": 151
},
{
"method": "GET",
"path": "/internal/users/:id",
"file": "server/internal/routes.js",
-- "line": 58
++ "line": 59
},
{
"method": "GET",
"path": "/internal/users/:id/linked-accounts",
"file": "server/internal/routes.js",
-- "line": 149
++ "line": 159
},
{
"method": "GET",
"path": "/internal/users/:id/theme",
"file": "server/internal/routes.js",
-- "line": 95
++ "line": 96
},
{
"method": "POST",
"path": "/internal/users/bulk",
"file": "server/internal/routes.js",
-- "line": 80
++ "line": 81
},
{
"method": "GET",
"path": "/internal/users/by-username/:username",
"file": "server/internal/routes.js",
-- "line": 69
++ "line": 70
},
{
"method": "POST",
"path": "/internal/verify-token",
"file": "server/internal/routes.js",
-- "line": 36
++ "line": 37
},
{
"method": "GET",
@@@ -6462,25 +6480,25 @@
"method": "GET",
"path": "/oauth/.well-known/openid-configuration",
"file": "server/auth/oauth-routes.js",
-- "line": 304
++ "line": 306
},
{
"method": "GET",
"path": "/oauth/authorize",
"file": "server/auth/oauth-routes.js",
-- "line": 20
++ "line": 21
},
{
"method": "POST",
"path": "/oauth/confirm",
"file": "server/auth/oauth-routes.js",
-- "line": 78
++ "line": 79
},
{
"method": "POST",
"path": "/oauth/token",
"file": "server/auth/oauth-routes.js",
-- "line": 131
++ "line": 132
},
{
"method": "GET",
@@@ -7230,7 +7248,7 @@
],
"contractTodos": 0,
"unresolvedMounts": [],
-- "testFiles": 17,
++ "testFiles": 18,
"ci": false
},
{
@@@ -11173,7 +11191,7 @@
"repo": "OpenVibe.Live",
"table": "ai_chatbot_configs",
"declaredAt": [
-- "server/db/database.js:1803"
++ "server/db/database.js:1807"
],
"prodDbs": [
"live.db"
@@@ -11217,7 +11235,7 @@
"repo": "OpenVibe.Live",
"table": "ai_timeline_cache",
"declaredAt": [
-- "server/db/database.js:1296"
++ "server/db/database.js:1300"
],
"prodDbs": [
"live.db"
@@@ -11233,7 +11251,7 @@
"repo": "OpenVibe.Live",
"table": "ai_usage",
"declaredAt": [
-- "server/db/database.js:1254"
++ "server/db/database.js:1258"
],
"prodDbs": [
"live.db"
@@@ -11249,7 +11267,7 @@
"repo": "OpenVibe.Live",
"table": "ai_viewer_log",
"declaredAt": [
-- "server/db/database.js:1887"
++ "server/db/database.js:1891"
],
"prodDbs": [
"live.db"
@@@ -11265,7 +11283,7 @@
"repo": "OpenVibe.Live",
"table": "ai_viewer_threads",
"declaredAt": [
-- "server/db/database.js:1873"
++ "server/db/database.js:1877"
],
"prodDbs": [
"live.db"
@@@ -11359,7 +11377,7 @@
"repo": "OpenVibe.Live",
"table": "anon_ip_mappings",
"declaredAt": [
-- "server/db/database.js:936"
++ "server/db/database.js:940"
],
"prodDbs": [
"live.db"
@@@ -11407,7 +11425,7 @@
"repo": "OpenVibe.Live",
"table": "app_state",
"declaredAt": [
-- "server/db/database.js:1167"
++ "server/db/database.js:1171"
],
"prodDbs": [
"live.db"
@@@ -11423,7 +11441,7 @@
"repo": "OpenVibe.Live",
"table": "approved_ips",
"declaredAt": [
-- "server/db/database.js:2075"
++ "server/db/database.js:2079"
],
"prodDbs": [
"live.db"
@@@ -12021,7 +12039,7 @@
"repo": "OpenVibe.Live",
"table": "channel_ai_bots",
"declaredAt": [
-- "server/db/database.js:1828"
++ "server/db/database.js:1832"
],
"prodDbs": [
"live.db"
@@@ -12037,7 +12055,7 @@
"repo": "OpenVibe.Live",
"table": "channel_ai_config",
"declaredAt": [
-- "server/db/database.js:1852"
++ "server/db/database.js:1856"
],
"prodDbs": [
"live.db"
@@@ -12053,7 +12071,7 @@
"repo": "OpenVibe.Live",
"table": "channel_moderation_settings",
"declaredAt": [
-- "server/db/database.js:1638",
++ "server/db/database.js:1642",
"server/db/schema.sql:514"
],
"prodDbs": [
@@@ -12070,7 +12088,7 @@
"repo": "OpenVibe.Live",
"table": "channel_moderators",
"declaredAt": [
-- "server/db/database.js:1621",
++ "server/db/database.js:1625",
"server/db/schema.sql:499"
],
"prodDbs": [
@@@ -12087,7 +12105,7 @@
"repo": "OpenVibe.Live",
"table": "channel_points",
"declaredAt": [
-- "server/db/database.js:760"
++ "server/db/database.js:764"
],
"prodDbs": [
"live.db"
@@@ -12103,7 +12121,7 @@
"repo": "OpenVibe.Live",
"table": "channel_sounds",
"declaredAt": [
-- "server/db/database.js:1741",
++ "server/db/database.js:1745",
"server/db/schema.sql:625"
],
"prodDbs": [
@@@ -12120,7 +12138,7 @@
"repo": "OpenVibe.Live",
"table": "channel_sounds_new",
"declaredAt": [
-- "server/db/database.js:1765"
++ "server/db/database.js:1769"
],
"prodDbs": [],
"inCode": true,
@@@ -12150,7 +12168,7 @@
"repo": "OpenVibe.Live",
"table": "chat_ai_summaries",
"declaredAt": [
-- "server/db/database.js:1308"
++ "server/db/database.js:1312"
],
"prodDbs": [
"live.db"
@@@ -12196,7 +12214,7 @@
"repo": "OpenVibe.Live",
"table": "chat_messages_new",
"declaredAt": [
-- "server/db/database.js:415"
++ "server/db/database.js:419"
],
"prodDbs": [],
"inCode": true,
@@@ -12210,7 +12228,7 @@
"repo": "OpenVibe.Live",
"table": "chat_timeline_events",
"declaredAt": [
-- "server/db/database.js:1328"
++ "server/db/database.js:1332"
],
"prodDbs": [
"live.db"
@@@ -12348,7 +12366,7 @@
"repo": "OpenVibe.Live",
"table": "comments",
"declaredAt": [
-- "server/db/database.js:849",
++ "server/db/database.js:853",
"server/db/schema.sql:585"
],
"prodDbs": [
@@@ -12381,7 +12399,7 @@
"repo": "OpenVibe.Live",
"table": "control_config_buttons",
"declaredAt": [
-- "server/db/database.js:2306"
++ "server/db/database.js:2310"
],
"prodDbs": [
"live.db"
@@@ -12397,7 +12415,7 @@
"repo": "OpenVibe.Live",
"table": "control_configs",
"declaredAt": [
-- "server/db/database.js:2292"
++ "server/db/database.js:2296"
],
"prodDbs": [
"live.db"
@@@ -12413,7 +12431,7 @@
"repo": "OpenVibe.Live",
"table": "control_whitelist",
"declaredAt": [
-- "server/db/database.js:2277"
++ "server/db/database.js:2281"
],
"prodDbs": [
"live.db"
@@@ -12565,7 +12583,7 @@
"repo": "OpenVibe.Live",
"table": "easter_egg_solves",
"declaredAt": [
-- "server/db/database.js:1340"
++ "server/db/database.js:1344"
],
"prodDbs": [
"live.db"
@@@ -12597,7 +12615,7 @@
"repo": "OpenVibe.Live",
"table": "emotes_new",
"declaredAt": [
-- "server/db/database.js:1709"
++ "server/db/database.js:1713"
],
"prodDbs": [],
"inCode": true,
@@@ -12940,7 +12958,7 @@
"repo": "OpenVibe.Live",
"table": "hidden_relay_users",
"declaredAt": [
-- "server/db/database.js:2112"
++ "server/db/database.js:2116"
],
"prodDbs": [
"live.db"
@@@ -12970,7 +12988,7 @@
"repo": "OpenVibe.Live",
"table": "ip_log",
"declaredAt": [
-- "server/db/database.js:2051"
++ "server/db/database.js:2055"
],
"prodDbs": [
"live.db"
@@@ -13000,7 +13018,7 @@
"repo": "OpenVibe.Live",
"table": "kick_channel_cache",
"declaredAt": [
-- "server/db/database.js:774"
++ "server/db/database.js:778"
],
"prodDbs": [
"live.db"
@@@ -13074,7 +13092,7 @@
"repo": "OpenVibe.Live",
"table": "managed_streams",
"declaredAt": [
-- "server/db/database.js:2420",
++ "server/db/database.js:2424",
"server/db/schema.sql:78"
],
"prodDbs": [
@@@ -13091,7 +13109,7 @@
"repo": "OpenVibe.Live",
"table": "media_request_settings",
"declaredAt": [
-- "server/db/database.js:869",
++ "server/db/database.js:873",
"server/db/schema.sql:722"
],
"prodDbs": [
@@@ -13108,7 +13126,7 @@
"repo": "OpenVibe.Live",
"table": "media_requests",
"declaredAt": [
-- "server/db/database.js:883",
++ "server/db/database.js:887",
"server/db/schema.sql:739"
],
"prodDbs": [
@@@ -13154,7 +13172,7 @@
"repo": "OpenVibe.Live",
"table": "moderation_actions",
"declaredAt": [
-- "server/db/database.js:1920"
++ "server/db/database.js:1924"
],
"prodDbs": [
"live.db"
@@@ -13200,7 +13218,7 @@
"repo": "OpenVibe.Live",
"table": "paste_comments",
"declaredAt": [
-- "server/db/database.js:2008"
++ "server/db/database.js:2012"
],
"prodDbs": [
"live.db"
@@@ -13216,7 +13234,7 @@
"repo": "OpenVibe.Live",
"table": "paste_likes",
"declaredAt": [
-- "server/db/database.js:1976"
++ "server/db/database.js:1980"
],
"prodDbs": [
"live.db"
@@@ -13232,7 +13250,7 @@
"repo": "OpenVibe.Live",
"table": "pastes",
"declaredAt": [
-- "server/db/database.js:1939"
++ "server/db/database.js:1943"
],
"prodDbs": [
"live.db"
@@@ -13248,7 +13266,7 @@
"repo": "OpenVibe.Live",
"table": "payment_orders",
"declaredAt": [
-- "server/db/database.js:1588"
++ "server/db/database.js:1592"
],
"prodDbs": [
"live.db"
@@@ -13264,7 +13282,7 @@
"repo": "OpenVibe.Live",
"table": "pending_ip_messages",
"declaredAt": [
-- "server/db/database.js:2092"
++ "server/db/database.js:2096"
],
"prodDbs": [
"live.db"
@@@ -13280,7 +13298,7 @@
"repo": "OpenVibe.Live",
"table": "platform_connections",
"declaredAt": [
-- "server/db/database.js:709"
++ "server/db/database.js:713"
],
"prodDbs": [
"live.db"
@@@ -13296,7 +13314,7 @@
"repo": "OpenVibe.Live",
"table": "powerchat_connections",
"declaredAt": [
-- "server/db/database.js:731"
++ "server/db/database.js:735"
],
"prodDbs": [
"live.db"
@@@ -13312,7 +13330,7 @@
"repo": "OpenVibe.Live",
"table": "powerchat_webhook_deliveries",
"declaredAt": [
-- "server/db/database.js:748"
++ "server/db/database.js:752"
],
"prodDbs": [
"live.db"
@@@ -13342,7 +13360,7 @@
"repo": "OpenVibe.Live",
"table": "relay_users",
"declaredAt": [
-- "server/db/database.js:1466"
++ "server/db/database.js:1470"
],
"prodDbs": [
"live.db"
@@@ -13358,7 +13376,7 @@
"repo": "OpenVibe.Live",
"table": "restream_destinations",
"declaredAt": [
-- "server/db/database.js:691"
++ "server/db/database.js:695"
],
"prodDbs": [
"live.db"
@@@ -13402,7 +13420,7 @@
"repo": "OpenVibe.Live",
"table": "robotstreamer_integrations",
"declaredAt": [
-- "server/db/database.js:605",
++ "server/db/database.js:609",
"server/db/schema.sql:58"
],
"prodDbs": [
@@@ -13419,7 +13437,7 @@
"repo": "OpenVibe.Live",
"table": "robotstreamer_integrations_new",
"declaredAt": [
-- "server/db/database.js:656"
++ "server/db/database.js:660"
],
"prodDbs": [],
"inCode": true,
@@@ -13498,7 +13516,7 @@
"repo": "OpenVibe.Live",
"table": "stream_controls_new",
"declaredAt": [
-- "server/db/database.js:2385"
++ "server/db/database.js:2389"
],
"prodDbs": [],
"inCode": true,
@@@ -13512,7 +13530,7 @@
"repo": "OpenVibe.Live",
"table": "stream_first_chats",
"declaredAt": [
-- "server/db/database.js:2040"
++ "server/db/database.js:2044"
],
"prodDbs": [
"live.db"
@@@ -13528,7 +13546,7 @@
"repo": "OpenVibe.Live",
"table": "stream_memories",
"declaredAt": [
-- "server/db/database.js:1181"
++ "server/db/database.js:1185"
],
"prodDbs": [
"live.db"
@@@ -13560,7 +13578,7 @@
"repo": "OpenVibe.Live",
"table": "stream_timeline_events",
"declaredAt": [
-- "server/db/database.js:1229"
++ "server/db/database.js:1233"
],
"prodDbs": [
"live.db"
@@@ -13576,7 +13594,7 @@
"repo": "OpenVibe.Live",
"table": "streamer_overviews",
"declaredAt": [
-- "server/db/database.js:1274"
++ "server/db/database.js:1278"
],
"prodDbs": [
"live.db"
@@@ -13672,7 +13690,7 @@
"repo": "OpenVibe.Live",
"table": "translations",
"declaredAt": [
-- "server/db/database.js:506",
++ "server/db/database.js:510",
"server/i18n/translate.js:145"
],
"prodDbs": [
@@@ -13689,7 +13707,7 @@
"repo": "OpenVibe.Live",
"table": "tts_voice_overrides",
"declaredAt": [
-- "server/db/database.js:1352"
++ "server/db/database.js:1356"
],
"prodDbs": [
"live.db"
@@@ -13879,7 +13897,7 @@
"repo": "OpenVibe.Live",
"table": "vibe_coding_events",
"declaredAt": [
-- "server/db/database.js:2677",
++ "server/db/database.js:2681",
"server/db/schema.sql:198"
],
"prodDbs": [
@@@ -13896,7 +13914,7 @@
"repo": "OpenVibe.Live",
"table": "vibe_coding_sessions",
"declaredAt": [
-- "server/db/database.js:2642",
++ "server/db/database.js:2646",
"server/db/schema.sql:170"
],
"prodDbs": [
@@@ -13913,7 +13931,7 @@
"repo": "OpenVibe.Live",
"table": "viewer_samples",
"declaredAt": [
-- "server/db/database.js:3956"
++ "server/db/database.js:3960"
],
"prodDbs": [
"live.db"
@@@ -14445,7 +14463,7 @@
"repo": "OpenVibe.Network",
"table": "email_verification_tokens",
"declaredAt": [
-- "server/db/database.js:506"
++ "server/db/database.js:509"
],
"prodDbs": [
"network.db"
@@@ -14473,6 +14491,22 @@
"wave": "W1 (module split)",
"note": "Identity, sessions, OAuth, themes, notifications, registry, chrome, audit, admin."
},
++ {
++ "repo": "OpenVibe.Network",
++ "table": "identity_legacy_map",
++ "declaredAt": [
++ "server/identity/subjects.js:25"
++ ],
++ "prodDbs": [
++ "network.db"
++ ],
++ "inCode": true,
++ "inProd": true,
++ "target": "OpenVibe.Network",
++ "disposition": "keep",
++ "wave": "W1 (module split)",
++ "note": "Identity, sessions, OAuth, themes, notifications, registry, chrome, audit, admin."
++ },
{
"repo": "OpenVibe.Network",
"table": "ip_log",
@@@ -14637,7 +14671,7 @@
"repo": "OpenVibe.Network",
"table": "stream_live_announcements",
"declaredAt": [
-- "server/internal/routes.js:300"
++ "server/internal/routes.js:310"
],
"prodDbs": [
"network.db"
@@@ -19283,7 +19317,7 @@
}
],
"metrics": {
-- "github.charters": "21 charter-only repos of 32",
++ "github.charters": "20 charter-only repos of 32",
"contract.todo-markers": "Live 15, Network 0, Media 0, Tools 0, Community 0, Games 0, Sites 0",
"outbound.call-sites": "65 caller-file/target pairs across 50 files",
"outbound.internal-key": "28 of 65 call sites authenticate with the shared internal key",
@@@ -19293,7 +19327,7 @@
"vendored.divergent": "4 divergent: Community/ov-icons.js, Live/user-card.js, Media/ov-icons.js, Tools/ov-icons.js",
"ci.repos": "0 of 7 scanned repos have .github/workflows",
"deploy.drift": "1 service(s) not running origin/main",
-- "tests.OpenVibe.Live": "55 test files",
++ "tests.OpenVibe.Live": "56 test files",
"tables.OpenVibe.Live": "125 tables",
"tables.OpenVibe.Live.target:OpenVibe.Games (import source)": "31 Live tables target OpenVibe.Games (import source)",
"tables.OpenVibe.Live.target:OpenVibe.AI": "14 Live tables target OpenVibe.AI",
@@@ -19312,9 +19346,9 @@
"tables.OpenVibe.Live.target:OpenVibe.Billing": "2 Live tables target OpenVibe.Billing",
"tables.OpenVibe.Live.target:OpenVibe.Billing + OpenVibe.VIP": "1 Live tables target OpenVibe.Billing + OpenVibe.VIP",
"tables.OpenVibe.Live.target:OpenVibe.Codes": "2 Live tables target OpenVibe.Codes",
-- "tests.OpenVibe.Network": "17 test files",
-- "tables.OpenVibe.Network": "35 tables",
-- "tables.OpenVibe.Network.target:OpenVibe.Network": "32 Network tables target OpenVibe.Network",
++ "tests.OpenVibe.Network": "18 test files",
++ "tables.OpenVibe.Network": "36 tables",
++ "tables.OpenVibe.Network.target:OpenVibe.Network": "33 Network tables target OpenVibe.Network",
"tables.OpenVibe.Network.target:OpenVibe.Billing (loyalty ledger)": "2 Network tables target OpenVibe.Billing (loyalty ledger)",
"tables.OpenVibe.Network.target:OpenVibe.Events": "1 Network tables target OpenVibe.Events",
"tests.OpenVibe.Media": "4 test files",
@@@ -19383,7 +19417,7 @@
"metrics": [
{
"key": "github.charters",
-- "value": "21 charter-only repos of 32"
++ "value": "20 charter-only repos of 32"
},
{
"key": "contract.todo-markers",
@@@ -19660,7 +19694,7 @@
"metrics": [
{
"key": "github.charters",
-- "value": "21 charter-only repos of 32"
++ "value": "20 charter-only repos of 32"
}
],
"verified": true
@@@ -20034,13 +20068,13 @@
"id": "EC1",
"text": "Every table has an owner classification",
"pass": true,
-- "detail": "249 tables classified, 0 unclassified"
++ "detail": "250 tables classified, 0 unclassified"
},
{
"id": "EC2",
"text": "Every route is attributed to a repo and source line",
"pass": true,
-- "detail": "926 routes; 0 router mounts whose module could not be resolved (their routes are listed without the mount prefix)"
++ "detail": "928 routes; 0 router mounts whose module could not be resolved (their routes are listed without the mount prefix)"
},
{
"id": "EC3",