openvibers/openvibe.host Commits

Compatibility register: C-75 narrowed (old Media routes gone; only the dual write left) (#73)

OP OpenVibers committed 11 Oct 2026 · 639a9ddcb1 · 1 file, +3 −3

Compatibility register, third pass for 2026-10-11:
- **C-75 narrowed.** Live links files by id (Live#98) and legacy file-name requests fell to zero; Media#88 removed `/v/<name>`, `/api/thumbnails/<name>` and `/f/screenshots/<name>`; the paste tables are dropped (Media#89). Only Media's dual write (`vods`/`clips` projected into `media_objects`) is left. `/tos` → `/terms` is kept by design.
- **The summary names what the four other open entries wait on:** C-30 and C-32 on the owner's PowerChat webhook re-point; C-40 and C-41 on broadcaster windows (O2), the owner's DNS and port prerequisites being done.

Changes

ddiff --git a/docs/compatibility-register.md b/docs/compatibility-register.md
iindex 2d6dc03..613fc69 100644
---- a/docs/compatibility-register.md
++++ b/docs/compatibility-register.md
@@@ -25,11 +25,11 @@ Contracts has no deprecated contracts and no aliases (`OpenVibe.Contracts/compat
## Summary
--| Status as checked 2026-10-11 (second pass) | Count | Entries |
++| Status as checked 2026-10-11 (third pass) | Count | Entries |
|---|---:|---|
| Closed | 43 | C-01, C-02, C-03, C-04, C-05, C-06, C-10, C-11, C-12, C-13, C-14, C-15, C-20, C-21, C-22, C-23, C-24, C-42, C-50, C-51, C-52, C-53, C-54, C-55, C-56, C-57, C-58, C-59, C-60, C-61, C-70, C-71, C-72, C-73, C-74, C-76, C-77, C-80, C-81, C-82, C-83, C-84, C-85 |
| Kept (not a shim) | 1 | C-31 |
--| Open | 5 | C-30, C-32, C-40, C-41 (all four wait on the owner), C-75 |
++| Open | 5 | C-30, C-32 (wait on the owner's PowerChat webhook re-point), C-40, C-41 (the owner's DNS and port prerequisites are done; they wait on broadcaster windows, O2), C-75 (narrowed: only Media's dual write is left) |
C-72 retains its earlier host-backup closure claim; source checkouts cannot verify deleted host backups. Number gaps have no entries in this register.
@@@ -119,7 +119,7 @@ estate now carries a service token with the one capability it performs (Contract
| C-72 | **Closed 2026-10-10:** the ADR-021 backups that still held IPs were deleted: `/opt/openvibe.live/data/backups/analytics-pre-adr021-2026-09-23.db` (1.7 GB), `/opt/openvibe.tools/backups/analytics-2026-09-23` (76 MB) and Network's `data/backups/network.db.pre-adr021-20260923T1634` (731 MB), each with its -wal/-shm. No other copy holds them: the oldest ovhost backup on the host is 2026-09-27, and the first off-site run (2026-09-23 18:47 UTC) came after the scrub. | host | Live, Tools, Network | *closed* | — | Pre-ADR-021 analytics are gone for good, as ADR-021 intends. |
| C-73 | **Closed (verified 2026-10-11):** Live `migrations/0002_live.sql:9-13` omits frozen `vods`, `clips` and `pastes` from its PostgreSQL schema; `server/db/database.js:2361-2365` has no reader. *Steps 1-2 DONE 2026-09-23: no Live code reads or writes the frozen tables (Live `9b80d2b`, `9b3be33`; the test refuses both, with an empty allow-list); deployed, 13 public endpoints keep their shape and counts. Step 3 (drop) not before 2026-10-23, procedure in Live `docs/vods-and-clips.md`.* **Live's legacy `vods`/`clips`/`pastes` tables**. They were frozen for the Media cutover, and the canonical copies are now in Media and Community. **There is no tripwire; only comments** (`server/db/database.js:3223-3224`). One write path remains: `PUT /api/admin/pastes/:id/nsfw` (`server/admin/routes.js:427-434`). Exported write helpers with no callers remain: `updatePasteAi`, `updateVodHealth`, `repairVodDuration`, `updatePaste`, `deletePaste`, `likePaste`. Live still **reads** them for live pages: `server/ai/chat-ai-routes.js:337`, `server/admin/routes.js:91-92`, `server/arena/arena-service.js:436`, `server/streaming/routes.js:1547`, and about 70 queries in `database.js`. These reads serve pre-cutover data. | Live (above); `docs/vods-and-clips.md:3-5` | Live | **No removal plan in the repo.** *Proposed*: (1) remove the nsfw write and the dead helpers, and add a tripwire like `assertLiveLedger`, by 2026-10-09; (2) move the four readers to Media or Community; (3) back up and drop the tables after 30 days with no reader. | 2026-11-06 | The tables are the only local copy of pre-Media rows. Keep the backup. |
| C-74 | **Closed (verified 2026-10-11):** Live `server/config.js:246-247` records removal of its pre-Media path settings; Media owns its own storage paths. **Pre-Media local paths** `VOD_PATH`, `CLIPS_PATH`, `COLD_STORAGE_PATH`, `THUMBNAILS_PATH` are still read by Live's config. | Live `server/config.js:251-257` | Live | *proposed*: no code reads the directories. **Unknown** whether any does. Grep for each config key. | 2026-11-06 | none needed |
--| C-75 | **Open (2026-10-11):** Media's per-app webhooks are gone (Media#87: `server/webhooks.js` deleted; outcomes are OpenVibe.Events events only). Left: the dual write (old rows synced into `media_objects`) and the old routes. Live still produces those routes' URLs (`/api/thumbnails/<name>` through its thumbnails proxy, `/f/screenshots/<name>` from `media-client.screenshotUrl`), so Live moves to object URLs (`/o/<id>`) first; the routes were last requested on 2026-10-02. **Media dual write**: the old tables are written first, then synced into `media_objects`. A sync failure only logs. Old routes also stay: `/v/:id` basename fallback, `/api/thumbnails/:name` with app `live` hard-coded, `/f/screenshots/:name`, and `/tos` → `/terms`. Webhooks to Live are published alongside Events. | Media `docs/object-model.md:3-7,88-112`, `server/db/database.js:100-124`, `server/public/routes.js:176-190,346-384`, `server/events.js:1-18` | Media | *documented*: "The object layer is additive; old routes keep working throughout" (ADR-006 §Rollback). Webhooks stay "until every consumer reads events" (`server/events.js`). *Proposed*: Live consumes `media.*` events instead of `/internal/media-webhook`, then remove the webhooks. | 2026-12-18 | Old routes and tables. |
++| C-75 | **Open, narrowed (2026-10-11):** the old routes are gone. Live links VOD and clip files by id (`/api/{vods,clips}/:id/file`, Live#98), and once it deployed, requests for the legacy file names fell to zero. Media#88 then removed `/v/<name>` (`/v/:id` is numeric only), `/api/thumbnails/<name>` and `/f/screenshots/<name>`; `/p/<slug>/screenshot` keeps its 301 to Community. Media's per-app webhooks went earlier (Media#87), and its frozen paste tables are dropped (Media#89, migration 0007). **Left:** the dual write: `vods`/`clips` rows are projected into `media_objects` (`server/objects/model.js` `project()`) until VOD and clip writes go to the object layer directly. `/tos` → `/terms` is a legal-path alias and is kept by design. | Media `server/objects/model.js:221-400`, `server/public/routes.js` | Media | *documented*: "The object layer is additive" (ADR-006 §Rollback). *Next*: write VODs and clips as objects, then drop the projection. | 2026-12-18 | The projection. |
| C-76 | **Closed (verified 2026-10-11):** Live `deploy/scripts/deploy.sh:4-16` delegates to ovhost release layout and supports rollback. **Live legacy (in-place) deploy layout**, "current production" (Live `docs/deploy.md:31-32`). A rollback resets the checkout but not `node_modules`. `--rollback` is refused in this layout. | Live `deploy/scripts/deploy.sh:347,394-419`, `deploy/systemd/openvibe-live.service` | Live | **retired 2026-09-24 05:51 UTC**: `migrate-to-releases.sh` ran on the host (one restart, no streams live); Live runs `/opt/openvibe.live/current` → `releases/<time>-<sha>` and deploys from there; the inventory reads Live's release as root (`owner: root`, `runAs: ubuntu`); the Live restore drill passed after the switch. | 2026-10-09 | `git reset` to the old commit. |
| C-77 | **Closed (verified 2026-10-11):** No `ALLOW_P2P_FALLBACK` reader or P2P relay path remains under Live `server/`. **`ALLOW_P2P_FALLBACK`** (default `false`), an "emergency rollback" to legacy P2P relays, which can expose viewer IPs. | Live `server/config.js:87-93`, `SETUP.md:136` | Live | **No condition documented.** *Proposed*: remove the flag and the P2P relay path. | 2026-11-06 | Set the flag to `true` (not recommended). |