openvibers/openvibe.host Commits
D41 proof passed on production (sources: deploy, rollback, redeploy; 37 other units untouched); register C-83 (media webhook → Events, both since 20:00 UTC), C-84 (deploy notice bridge), C-85 (go-live push → Network)
Changes
@@@ -133,6 +133,9 @@ The dates below assume each caller moves by **2026-10-09**. The key paths then g| C-80 | **`openvibe-shared/analytics.js`** (`AnalyticsTracker`) stores raw IP, `user_id`, city and full UA. **No deployed service uses it.** Live (`server/analytics/`, `0e07aec`), Network (`server/analytics/`) and Tools (`apps/_shared/analytics`, `533c9a3`) run their own ADR-021 trackers. No other repo requires it. The one remaining `require` is the stale local checkout `~/OpenVibers/OpenVibe.Live` (`e266060`, behind `origin/main`). It is still exported (`package.json:10`, `index.js:8,40-44`) with no deprecation marker. Stale docs: Shared `docs/migration-plan.md:29,252,493`; Live `SECURITY_AUDIT.md:98`. | OpenVibe.Shared `analytics.js` | Shared | **No condition documented** (ADR-021 does not mention it). *Proposed*: mark it deprecated in the next Shared minor, then remove it in the next major, since removing an export is breaking (ADR-008). | Deprecate 2026-10-09; remove in Shared v2.0.0, 2026-11-06 | Pin the previous Shared tag. || C-81 | **OpenVibe.Sites placeholders**. There are 16, all `"stage": "placeholder"`: openvibe.chat, .news, .reviews, .tips, .vip, .trade, .host, .deals, .coupons, openre.stream, and auth., api., admin., themes., realtime. and ai.openvibe.network. The page says "coming soon · this page is a placeholder, nothing here is live yet". None claims to be a working product. **Two defects:** repos outside `EXISTING_REPOS` are labelled "(charter only, no code yet)", which is false for Tips, VIP, News, Reviews, Trade, Deals, Coupons and Host; and **realtime.openvibe.network advertises a product that ADR-005 closed**. | Sites `sites.json`, `build.js:22,157-161,283`, `deploy/nginx/*.conf` | Sites (each service owns its launch) | *documented*: each entry is "Removed from sites.json in the same release that the real service takes over this domain" (`build.js:283`, `README.md:20-21`, test `test/build.test.js:39-43`). *Proposed*: fix the "charter only" label from the repo's STATUS, and remove the realtime placeholder now. | Realtime and label: 2026-09-30; the rest: at each launch | Re-add the entry. || C-82 | **OpenVibe.Realtime**, closed by ADR-005: realtime runs inside Events as SSE `/realtime/stream`. `STATUS.json` says `stage: closed`. Leftovers: the README still says "Decision pending" (`:12,51-53`); the GitHub repo is not archived; Contracts `manifests/services/realtime.json:8` says `"status": "placeholder"`; Events `README.md:6` says "until ADR-005 decides"; and the Sites placeholder (C-81). | OpenVibe.Realtime; Contracts; Sites; Events | Contracts (manifest), Sites, Events | *proposed*: fix the README, mark the manifest `closed` (a Contracts release), remove the Sites placeholder, archive the repo. | 2026-09-30 | ADR-005: revisit only on measured load. |++| C-83 | **Live `/internal/media-webhook`** next to the Events consumer `/internal/media-events` (media.vod.*, media.clip.*, media.storage.*). `MEDIA_EVENTS_AUTHORITY=webhook` \| `both` \| `events`; each outcome is applied once (inbox consumer `live-media-outcomes`, key object + event id; Media webhooks carry `event_id` since `cbf8410`). **`both` since 2026-09-23 20:00 UTC** (3 subscriptions created). | Live `server/media-proxy/webhook.js`, `outcomes.js`, `media-events.js`; Media `server/webhooks.js` | Live + Media | *documented* (Live `docs/architecture.md` "Media outcomes over Events"): `events` has run clean (every VOD/clip since the switch has its `vod_ai_state`/`clip_ai_state` row and a receipt, no DLQ entries for Live's subscriptions); then clear Live's `webhook_url` in Media `apps`, wait a release, delete the route, `MEDIA_WEBHOOK_SECRET` and the `webhook`/`both` modes. | `events` 2026-10-01; removal 2026-10-14 | `MEDIA_EVENTS_AUTHORITY=webhook`; `subscribe-media-events.js --disable` |++| C-84 | **Live deploy notice over the Chat bridge** (`chat-remote.js` `deployNotice`) next to the `live.release.deployed` event (Live `e73a92d`). | Live `server/chat/deploy-notice.js`, `server/chat/chat-remote.js` | Chat + Live | *proposed*: Chat subscribes to `live.release.deployed` and folds by `subject.id`; one clean deploy; then delete the bridge call. | 2026-10-14 | Keep the bridge call |++| C-85 | **Live's own go-live follower push** (`server/streaming/golive-notify.js`) next to Network's `live.stream.started` consumer (subscription since 2026-09-23 19:55 UTC; Live `GET /internal/followers`). A shared per-streamer rate limit in Network stops double notifications. | Live `golive-notify.js` + call sites in `routes.js`, `rtmp-server.js`, `whip-handler.js`, `openre/mirror.js`; Network `server/notifications/stream-live.js` | Live + Network | *documented* (Network commit 2a95548): Network's log shows `outcome: notified` for real go-lives; then delete Live's push and retire Network's `POST /internal/events/stream-live`. | 2026-10-07 | Unsubscribe Network from `live.stream.started` |## Kept by design (not shims)@@@ -132,6 +132,7 @@ nothing reads it in production today.| Date (UTC) | Service | Releases | Other units / readiness | Evidence | Result ||---|---|---|---|---|---|++| 2026-09-23 20:09 | sources | `2e986af27a55` → `202aec4fa0e5` → `2e986af27a55` (3 restarts) | 37 other units identical: yes; readiness kept: yes | `/var/lib/openvibe-host/d41/sources-20260923-200932` | PASS |*(no run yet)*
@@ -133,6 +133,9 @@ The dates below assume each caller moves by **2026-10-09**. The key paths then g
@@ -133,6 +133,9 @@ The dates below assume each caller moves by **2026-10-09**. The key paths then g
| C-80 | **`openvibe-shared/analytics.js`** (`AnalyticsTracker`) stores raw IP, `user_id`, city and full UA. **No deployed service uses it.** Live (`server/analytics/`, `0e07aec`), Network (`server/analytics/`) and Tools (`apps/_shared/analytics`, `533c9a3`) run their own ADR-021 trackers. No other repo requires it. The one remaining `require` is the stale local checkout `~/OpenVibers/OpenVibe.Live` (`e266060`, behind `origin/main`). It is still exported (`package.json:10`, `index.js:8,40-44`) with no deprecation marker. Stale docs: Shared `docs/migration-plan.md:29,252,493`; Live `SECURITY_AUDIT.md:98`. | OpenVibe.Shared `analytics.js` | Shared | **No condition documented** (ADR-021 does not mention it). *Proposed*: mark it deprecated in the next Shared minor, then remove it in the next major, since removing an export is breaking (ADR-008). | Deprecate 2026-10-09; remove in Shared v2.0.0, 2026-11-06 | Pin the previous Shared tag. |
| C-80 | **`openvibe-shared/analytics.js`** (`AnalyticsTracker`) stores raw IP, `user_id`, city and full UA. **No deployed service uses it.** Live (`server/analytics/`, `0e07aec`), Network (`server/analytics/`) and Tools (`apps/_shared/analytics`, `533c9a3`) run their own ADR-021 trackers. No other repo requires it. The one remaining `require` is the stale local checkout `~/OpenVibers/OpenVibe.Live` (`e266060`, behind `origin/main`). It is still exported (`package.json:10`, `index.js:8,40-44`) with no deprecation marker. Stale docs: Shared `docs/migration-plan.md:29,252,493`; Live `SECURITY_AUDIT.md:98`. | OpenVibe.Shared `analytics.js` | Shared | **No condition documented** (ADR-021 does not mention it). *Proposed*: mark it deprecated in the next Shared minor, then remove it in the next major, since removing an export is breaking (ADR-008). | Deprecate 2026-10-09; remove in Shared v2.0.0, 2026-11-06 | Pin the previous Shared tag. |
| C-81 | **OpenVibe.Sites placeholders**. There are 16, all `"stage": "placeholder"`: openvibe.chat, .news, .reviews, .tips, .vip, .trade, .host, .deals, .coupons, openre.stream, and auth., api., admin., themes., realtime. and ai.openvibe.network. The page says "coming soon · this page is a placeholder, nothing here is live yet". None claims to be a working product. **Two defects:** repos outside `EXISTING_REPOS` are labelled "(charter only, no code yet)", which is false for Tips, VIP, News, Reviews, Trade, Deals, Coupons and Host; and **realtime.openvibe.network advertises a product that ADR-005 closed**. | Sites `sites.json`, `build.js:22,157-161,283`, `deploy/nginx/*.conf` | Sites (each service owns its launch) | *documented*: each entry is "Removed from sites.json in the same release that the real service takes over this domain" (`build.js:283`, `README.md:20-21`, test `test/build.test.js:39-43`). *Proposed*: fix the "charter only" label from the repo's STATUS, and remove the realtime placeholder now. | Realtime and label: 2026-09-30; the rest: at each launch | Re-add the entry. |
| C-81 | **OpenVibe.Sites placeholders**. There are 16, all `"stage": "placeholder"`: openvibe.chat, .news, .reviews, .tips, .vip, .trade, .host, .deals, .coupons, openre.stream, and auth., api., admin., themes., realtime. and ai.openvibe.network. The page says "coming soon · this page is a placeholder, nothing here is live yet". None claims to be a working product. **Two defects:** repos outside `EXISTING_REPOS` are labelled "(charter only, no code yet)", which is false for Tips, VIP, News, Reviews, Trade, Deals, Coupons and Host; and **realtime.openvibe.network advertises a product that ADR-005 closed**. | Sites `sites.json`, `build.js:22,157-161,283`, `deploy/nginx/*.conf` | Sites (each service owns its launch) | *documented*: each entry is "Removed from sites.json in the same release that the real service takes over this domain" (`build.js:283`, `README.md:20-21`, test `test/build.test.js:39-43`). *Proposed*: fix the "charter only" label from the repo's STATUS, and remove the realtime placeholder now. | Realtime and label: 2026-09-30; the rest: at each launch | Re-add the entry. |
| C-82 | **OpenVibe.Realtime**, closed by ADR-005: realtime runs inside Events as SSE `/realtime/stream`. `STATUS.json` says `stage: closed`. Leftovers: the README still says "Decision pending" (`:12,51-53`); the GitHub repo is not archived; Contracts `manifests/services/realtime.json:8` says `"status": "placeholder"`; Events `README.md:6` says "until ADR-005 decides"; and the Sites placeholder (C-81). | OpenVibe.Realtime; Contracts; Sites; Events | Contracts (manifest), Sites, Events | *proposed*: fix the README, mark the manifest `closed` (a Contracts release), remove the Sites placeholder, archive the repo. | 2026-09-30 | ADR-005: revisit only on measured load. |
| C-82 | **OpenVibe.Realtime**, closed by ADR-005: realtime runs inside Events as SSE `/realtime/stream`. `STATUS.json` says `stage: closed`. Leftovers: the README still says "Decision pending" (`:12,51-53`); the GitHub repo is not archived; Contracts `manifests/services/realtime.json:8` says `"status": "placeholder"`; Events `README.md:6` says "until ADR-005 decides"; and the Sites placeholder (C-81). | OpenVibe.Realtime; Contracts; Sites; Events | Contracts (manifest), Sites, Events | *proposed*: fix the README, mark the manifest `closed` (a Contracts release), remove the Sites placeholder, archive the repo. | 2026-09-30 | ADR-005: revisit only on measured load. |
+| C-83 | **Live `/internal/media-webhook`** next to the Events consumer `/internal/media-events` (media.vod.*, media.clip.*, media.storage.*). `MEDIA_EVENTS_AUTHORITY=webhook` \| `both` \| `events`; each outcome is applied once (inbox consumer `live-media-outcomes`, key object + event id; Media webhooks carry `event_id` since `cbf8410`). **`both` since 2026-09-23 20:00 UTC** (3 subscriptions created). | Live `server/media-proxy/webhook.js`, `outcomes.js`, `media-events.js`; Media `server/webhooks.js` | Live + Media | *documented* (Live `docs/architecture.md` "Media outcomes over Events"): `events` has run clean (every VOD/clip since the switch has its `vod_ai_state`/`clip_ai_state` row and a receipt, no DLQ entries for Live's subscriptions); then clear Live's `webhook_url` in Media `apps`, wait a release, delete the route, `MEDIA_WEBHOOK_SECRET` and the `webhook`/`both` modes. | `events` 2026-10-01; removal 2026-10-14 | `MEDIA_EVENTS_AUTHORITY=webhook`; `subscribe-media-events.js --disable` |
+| C-84 | **Live deploy notice over the Chat bridge** (`chat-remote.js` `deployNotice`) next to the `live.release.deployed` event (Live `e73a92d`). | Live `server/chat/deploy-notice.js`, `server/chat/chat-remote.js` | Chat + Live | *proposed*: Chat subscribes to `live.release.deployed` and folds by `subject.id`; one clean deploy; then delete the bridge call. | 2026-10-14 | Keep the bridge call |
+| C-85 | **Live's own go-live follower push** (`server/streaming/golive-notify.js`) next to Network's `live.stream.started` consumer (subscription since 2026-09-23 19:55 UTC; Live `GET /internal/followers`). A shared per-streamer rate limit in Network stops double notifications. | Live `golive-notify.js` + call sites in `routes.js`, `rtmp-server.js`, `whip-handler.js`, `openre/mirror.js`; Network `server/notifications/stream-live.js` | Live + Network | *documented* (Network commit 2a95548): Network's log shows `outcome: notified` for real go-lives; then delete Live's push and retire Network's `POST /internal/events/stream-live`. | 2026-10-07 | Unsubscribe Network from `live.stream.started` |
## Kept by design (not shims)
## Kept by design (not shims)
@@ -132,6 +132,7 @@ nothing reads it in production today.
@@ -132,6 +132,7 @@ nothing reads it in production today.
| Date (UTC) | Service | Releases | Other units / readiness | Evidence | Result |
| Date (UTC) | Service | Releases | Other units / readiness | Evidence | Result |
|---|---|---|---|---|---|
|---|---|---|---|---|---|
+| 2026-09-23 20:09 | sources | `2e986af27a55` → `202aec4fa0e5` → `2e986af27a55` (3 restarts) | 37 other units identical: yes; readiness kept: yes | `/var/lib/openvibe-host/d41/sources-20260923-200932` | PASS |
*(no run yet)*
*(no run yet)*