openvibers/openvibe.vip Commits
Docs: STATUS.json and README match production (2026-09-23)
Changes
@@@ -2,8 +2,10 @@> Memberships: plans, perks and benefits recognised across every OpenVibe site.--**Status:** alpha — runtime built and tested (roadmap Wave 10), **not deployed**. `openvibe.vip` keeps--its [OpenVibe.Sites](https://github.com/OpenVibers/OpenVibe.Sites) placeholder until the launch rule++**Status:** alpha — runtime built and tested (roadmap Wave 10). Deployed internally, **not launched**:++it runs on the host since 2026-09-23 on `127.0.0.1:4620` only, with one creator (`network`) and no plans++or memberships, and checkout closed. `openvibe.vip` keeps its++[OpenVibe.Sites](https://github.com/OpenVibers/OpenVibe.Sites) placeholder until the launch rulebelow holds.**Domain:** `openvibe.vip` (port 4620, service id `vip`)**Decision:** [ADR-012](https://github.com/OpenVibers/OpenVibe.Contracts/blob/main/docs/adr/ADR-012-economic-classification.md) —@@@ -58,7 +60,7 @@ home that is not a cache.- **OpenVibe.Network** — RS256 service and user tokens (JWKS), OAuth sign-in for the pages, identityresolve (importer only).- **OpenVibe.Events** — delivery of Billing's events to `/internal/events`; relay of VIP's outbox.--- **openvibe-contracts** v0.14.0, **openvibe-sdk** v0.2.2 (outbox, inbox, delivery signatures),++- **openvibe-contracts** v0.19.0, **openvibe-sdk** v0.4.0 (outbox, inbox, delivery signatures),**openvibe-shared** v1.3.0 (chrome, legal pages, release, metrics, readiness).- Consumers (not wired yet): Live, Chat, Community, Blog, Wiki — through the client below.- **Not** OpenVibe.Live: VIP works with Live unavailable (nothing here calls Live).@@@ -74,9 +76,10 @@ node scripts/subscribe.js # create the three Events subscriptions fornode scripts/import-live.js --live-db <live snapshot> [--billing-db <billing snapshot>] [--dry-run] [--json]```--Production (at launch): `/opt/openvibe.vip`, env `/etc/openvibe/vip.env`, unit--[deploy/systemd/openvibe-vip.service](deploy/systemd/openvibe-vip.service) (state in `/var/lib/openvibe-vip`),--vhost [deploy/nginx/openvibe.vip.conf](deploy/nginx/openvibe.vip.conf).++Production (deployed, loopback only): `/opt/openvibe.vip`, env `/etc/openvibe/vip.env`, unit++[deploy/systemd/openvibe-vip.service](deploy/systemd/openvibe-vip.service) (state in `/var/lib/openvibe-vip`).++The vhost [deploy/nginx/openvibe.vip.conf](deploy/nginx/openvibe.vip.conf) is not installed yet:++`openvibe.vip` still serves the Sites placeholder. The three Events subscriptions exist.## Design@@@ -142,9 +145,9 @@ vhost [deploy/nginx/openvibe.vip.conf](deploy/nginx/openvibe.vip.conf).## API (`/api/v1`)Service tokens: Network client-credentials, audience `openvibe.vip`, one capability per route (the--`vip.*` ids are proposals in [docs/capabilities-proposal/](docs/capabilities-proposal/); until they ship--in an openvibe-contracts release, grants are matched with contracts' `capabilities.grants()` — exact id--or a `.*` family). User tokens: a Network user JWT; people act on their own things (their plans,++`vip.*` ids are released in openvibe-contracts v0.19.0; the drafts stay in++[docs/capabilities-proposal/](docs/capabilities-proposal/); grants are matched with contracts'++`capabilities.grants()` — exact id or a `.*` family). User tokens: a Network user JWT; people act on their own things (their plans,perks, rules, members; their own memberships and checks); staff roles (`VIP_STAFF_ROLES`) managenetwork plans. Errors are RFC 9457 problem+json. Creators are named by SubjectRef, `usr_` id, VIPhandle or `network`.@@@ -167,7 +170,7 @@ handle or `network`.| `PUT /memberships/:creator/preferences` | — | self only | `{ show_badge, listed }` || `GET\|POST /entitlements/check` `{subject, creator, mode}` | `vip.entitlement.check` | self | `{ status: active\|inactive\|unknown, active, expires_at, cancel_at_period_end, source, stale, valid_until, membership }` || `GET /policies?service=&type=&id=&owner=` / `?creator=` (services must name `owner`; a person defaults to themselves) | `vip.resource.policy.get` | owner | the rule for a resource / a creator's rules |--| `POST /policies`, `DELETE /policies/:id` | `vip.resource.policy.set` *(proposed addition)* | owner | gate / un-gate a resource `{resource, requirement: member\|plan\|perk, plan_id, perk_key, sensitive}` |++| `POST /policies`, `DELETE /policies/:id` | `vip.resource.policy.set` | owner | gate / un-gate a resource `{resource, requirement: member\|plan\|perk, plan_id, perk_key, sensitive}` || `POST /policies/evaluate` `{subject, resource, owner, rule_id?, mode?}` — `owner` = the creator the PRODUCT says owns the resource (usr_ id or `network`); only that creator's rule applies, none → `owner_required` | `vip.resource.policy.evaluate` | self | `{ allow, reason, rule, entitlement }` — **fails closed** || `GET /creators/:ref/members` | `vip.creator.members.list` | owner / staff | active members with their plan version; from Billing, or the labelled projection when Billing is down |@@@ -272,7 +275,8 @@ final import), `scripts/subscribe.js`, then open checkout (`VIP_CHECKOUT_PROVIDE| VIP works with Live unavailable | no code path calls Live; every test runs without a Live stub |Not yet demonstrated (needs the other services): convergence **across consuming products** (Live,--Chat, Community do not call VIP yet), and a real Billing/Events round trip on the host.++Chat, Community do not call VIP yet), and a real Billing/Events round trip on the host (Billing is in++shadow and has sent VIP no events). The Live import has not been run on production.## Launch rule@@@ -281,10 +285,10 @@ This repository does not make the product real, and the domain keeps its placehofollowing exist (plan §12.12):1. an owning runtime with health/readiness endpoints and observability — ✔ (`/api/health`, truthful `/api/ready`, `/metrics`);--2. canonical identity/auth integration (Network subjects, scoped service principals) — ✔ in code; the `vip` principal and grants are not provisioned yet;++2. canonical identity/auth integration (Network subjects, scoped service principals) — ✔; the `vip` principal is provisioned on the host;3. server-rendered public routes useful without JavaScript — ✔;--4. real persistence and end-to-end workflows — ✔ against stubs; not yet against the running Billing and Events;--5. capability and event registration against `OpenVibe.Contracts` — proposed ([docs/](docs/)), not released;++4. real persistence and end-to-end workflows — ✔ against stubs; not yet against the running Billing and Events (deployed, but Billing is in shadow and checkout is closed);++5. capability and event registration against `OpenVibe.Contracts` — ✔ v0.19.0;6. a migration/seed strategy ✔, a security/threat review (notes above; a review by someone else is still due), sitemap/robots ✔ (no feed by design);7. acceptance tests proving the advertised functionality — ✔ for VIP itself; cross-product convergence waits for the consumers.@@@ -2,7 +2,8 @@"repository": "OpenVibers/OpenVibe.VIP","stage": "alpha","code": true,-- "deployed": false,++ "deployed": true,++ "deployment": "Deployed internally, not launched: openvibe-ovh /opt/openvibe.vip (release dc98781), unit openvibe-vip, 127.0.0.1:4620 loopback only; https://openvibe.vip still serves the OpenVibe.Sites placeholder. Principal vip; three Events subscriptions for Billing's events; checkout closed (VIP_CHECKOUT_PROVIDERS empty). Production holds 1 creator (network) and 0 plans, perks or memberships. Pins openvibe-contracts v0.19.0, openvibe-sdk v0.4.0, openvibe-shared v1.3.0.","plan": "OpenVibe End-to-End Realignment & Implementation Plan, revision 3 (20 Sep 2026)","roadmap": "Wave 10","works": [@@@ -12,13 +13,17 @@"API /api/v1 for service and user tokens; consumer client openvibe-vip/client that fails closed","server-rendered creator plan pages, terms history, member status and creator dashboard with the shared chrome","outbox events vip.plan.published and vip.membership.changed (openvibe-sdk)",-- "import of Live's subscription offering, memberships from Billing entitlements"++ "import of Live's subscription offering, memberships from Billing entitlements",++ "14 vip.* capabilities, the service manifest and its events registered in openvibe-contracts v0.19.0",++ "deployed on the host (loopback only) with truthful /api/ready and /metrics; restore drill passed on the host 2026-09-23 05:23 UTC"],"not_yet": [-- "not deployed; openvibe.vip is still an OpenVibe.Sites placeholder",-- "vip.* capabilities and the service manifest are proposals, not in an openvibe-contracts release",-- "Live, Chat and Community do not call VIP yet (consumer integration is the next step)",++ "not launched: openvibe.vip is still an OpenVibe.Sites placeholder and the service answers on loopback only",++ "checkout is closed until the Billing cutover (Billing runs in shadow; the owner must re-point the PowerChat webhook first); no billing.* event has reached VIP",++ "the Live subscription import (scripts/import-live.js) has not been run (vip_migration_maps 0)",++ "Live, Chat, Community, Blog and Wiki do not call VIP yet (no client, no vip.* grants for them)",++ "membership badge, card and widget endpoints","Billing sells one channel subscription per member and creator: one purchasable plan per creator, no tiers, no network membership product"],-- "updated": "2026-09-22"++ "updated": "2026-09-23"}
@@ -2,8 +2,10 @@
@@ -2,8 +2,10 @@
> Memberships: plans, perks and benefits recognised across every OpenVibe site.
> Memberships: plans, perks and benefits recognised across every OpenVibe site.
-**Status:** alpha — runtime built and tested (roadmap Wave 10), **not deployed**. `openvibe.vip` keeps
-its [OpenVibe.Sites](https://github.com/OpenVibers/OpenVibe.Sites) placeholder until the launch rule
+**Status:** alpha — runtime built and tested (roadmap Wave 10). Deployed internally, **not launched**:
+it runs on the host since 2026-09-23 on `127.0.0.1:4620` only, with one creator (`network`) and no plans
+or memberships, and checkout closed. `openvibe.vip` keeps its
+[OpenVibe.Sites](https://github.com/OpenVibers/OpenVibe.Sites) placeholder until the launch rule
below holds.
below holds.
**Domain:** `openvibe.vip` (port 4620, service id `vip`)
**Domain:** `openvibe.vip` (port 4620, service id `vip`)
**Decision:** [ADR-012](https://github.com/OpenVibers/OpenVibe.Contracts/blob/main/docs/adr/ADR-012-economic-classification.md) —
**Decision:** [ADR-012](https://github.com/OpenVibers/OpenVibe.Contracts/blob/main/docs/adr/ADR-012-economic-classification.md) —
@@ -58,7 +60,7 @@ home that is not a cache.
@@ -58,7 +60,7 @@ home that is not a cache.
- **OpenVibe.Network** — RS256 service and user tokens (JWKS), OAuth sign-in for the pages, identity
- **OpenVibe.Network** — RS256 service and user tokens (JWKS), OAuth sign-in for the pages, identity
resolve (importer only).
resolve (importer only).
- **OpenVibe.Events** — delivery of Billing's events to `/internal/events`; relay of VIP's outbox.
- **OpenVibe.Events** — delivery of Billing's events to `/internal/events`; relay of VIP's outbox.
-- **openvibe-contracts** v0.14.0, **openvibe-sdk** v0.2.2 (outbox, inbox, delivery signatures),
+- **openvibe-contracts** v0.19.0, **openvibe-sdk** v0.4.0 (outbox, inbox, delivery signatures),
**openvibe-shared** v1.3.0 (chrome, legal pages, release, metrics, readiness).
**openvibe-shared** v1.3.0 (chrome, legal pages, release, metrics, readiness).
- Consumers (not wired yet): Live, Chat, Community, Blog, Wiki — through the client below.
- Consumers (not wired yet): Live, Chat, Community, Blog, Wiki — through the client below.
- **Not** OpenVibe.Live: VIP works with Live unavailable (nothing here calls Live).
- **Not** OpenVibe.Live: VIP works with Live unavailable (nothing here calls Live).
@@ -74,9 +76,10 @@ node scripts/subscribe.js # create the three Events subscriptions for
@@ -74,9 +76,10 @@ node scripts/subscribe.js # create the three Events subscriptions for
node scripts/import-live.js --live-db <live snapshot> [--billing-db <billing snapshot>] [--dry-run] [--json]
node scripts/import-live.js --live-db <live snapshot> [--billing-db <billing snapshot>] [--dry-run] [--json]
```
```
-Production (at launch): `/opt/openvibe.vip`, env `/etc/openvibe/vip.env`, unit
-[deploy/systemd/openvibe-vip.service](deploy/systemd/openvibe-vip.service) (state in `/var/lib/openvibe-vip`),
-vhost [deploy/nginx/openvibe.vip.conf](deploy/nginx/openvibe.vip.conf).
+Production (deployed, loopback only): `/opt/openvibe.vip`, env `/etc/openvibe/vip.env`, unit
+[deploy/systemd/openvibe-vip.service](deploy/systemd/openvibe-vip.service) (state in `/var/lib/openvibe-vip`).
+The vhost [deploy/nginx/openvibe.vip.conf](deploy/nginx/openvibe.vip.conf) is not installed yet:
+`openvibe.vip` still serves the Sites placeholder. The three Events subscriptions exist.
## Design
## Design
@@ -142,9 +145,9 @@ vhost [deploy/nginx/openvibe.vip.conf](deploy/nginx/openvibe.vip.conf).
@@ -142,9 +145,9 @@ vhost [deploy/nginx/openvibe.vip.conf](deploy/nginx/openvibe.vip.conf).
## API (`/api/v1`)
## API (`/api/v1`)
Service tokens: Network client-credentials, audience `openvibe.vip`, one capability per route (the
Service tokens: Network client-credentials, audience `openvibe.vip`, one capability per route (the
-`vip.*` ids are proposals in [docs/capabilities-proposal/](docs/capabilities-proposal/); until they ship
-in an openvibe-contracts release, grants are matched with contracts' `capabilities.grants()` — exact id
-or a `.*` family). User tokens: a Network user JWT; people act on their own things (their plans,
+`vip.*` ids are released in openvibe-contracts v0.19.0; the drafts stay in
+[docs/capabilities-proposal/](docs/capabilities-proposal/); grants are matched with contracts'
+`capabilities.grants()` — exact id or a `.*` family). User tokens: a Network user JWT; people act on their own things (their plans,
perks, rules, members; their own memberships and checks); staff roles (`VIP_STAFF_ROLES`) manage
perks, rules, members; their own memberships and checks); staff roles (`VIP_STAFF_ROLES`) manage
network plans. Errors are RFC 9457 problem+json. Creators are named by SubjectRef, `usr_` id, VIP
network plans. Errors are RFC 9457 problem+json. Creators are named by SubjectRef, `usr_` id, VIP
handle or `network`.
handle or `network`.
@@ -167,7 +170,7 @@ handle or `network`.
@@ -167,7 +170,7 @@ handle or `network`.
| `PUT /memberships/:creator/preferences` | — | self only | `{ show_badge, listed }` |
| `PUT /memberships/:creator/preferences` | — | self only | `{ show_badge, listed }` |
| `GET\|POST /entitlements/check` `{subject, creator, mode}` | `vip.entitlement.check` | self | `{ status: active\|inactive\|unknown, active, expires_at, cancel_at_period_end, source, stale, valid_until, membership }` |
| `GET\|POST /entitlements/check` `{subject, creator, mode}` | `vip.entitlement.check` | self | `{ status: active\|inactive\|unknown, active, expires_at, cancel_at_period_end, source, stale, valid_until, membership }` |
| `GET /policies?service=&type=&id=&owner=` / `?creator=` (services must name `owner`; a person defaults to themselves) | `vip.resource.policy.get` | owner | the rule for a resource / a creator's rules |
| `GET /policies?service=&type=&id=&owner=` / `?creator=` (services must name `owner`; a person defaults to themselves) | `vip.resource.policy.get` | owner | the rule for a resource / a creator's rules |
-| `POST /policies`, `DELETE /policies/:id` | `vip.resource.policy.set` *(proposed addition)* | owner | gate / un-gate a resource `{resource, requirement: member\|plan\|perk, plan_id, perk_key, sensitive}` |
+| `POST /policies`, `DELETE /policies/:id` | `vip.resource.policy.set` | owner | gate / un-gate a resource `{resource, requirement: member\|plan\|perk, plan_id, perk_key, sensitive}` |
| `POST /policies/evaluate` `{subject, resource, owner, rule_id?, mode?}` — `owner` = the creator the PRODUCT says owns the resource (usr_ id or `network`); only that creator's rule applies, none → `owner_required` | `vip.resource.policy.evaluate` | self | `{ allow, reason, rule, entitlement }` — **fails closed** |
| `POST /policies/evaluate` `{subject, resource, owner, rule_id?, mode?}` — `owner` = the creator the PRODUCT says owns the resource (usr_ id or `network`); only that creator's rule applies, none → `owner_required` | `vip.resource.policy.evaluate` | self | `{ allow, reason, rule, entitlement }` — **fails closed** |
| `GET /creators/:ref/members` | `vip.creator.members.list` | owner / staff | active members with their plan version; from Billing, or the labelled projection when Billing is down |
| `GET /creators/:ref/members` | `vip.creator.members.list` | owner / staff | active members with their plan version; from Billing, or the labelled projection when Billing is down |
@@ -272,7 +275,8 @@ final import), `scripts/subscribe.js`, then open checkout (`VIP_CHECKOUT_PROVIDE
@@ -272,7 +275,8 @@ final import), `scripts/subscribe.js`, then open checkout (`VIP_CHECKOUT_PROVIDE
| VIP works with Live unavailable | no code path calls Live; every test runs without a Live stub |
| VIP works with Live unavailable | no code path calls Live; every test runs without a Live stub |
Not yet demonstrated (needs the other services): convergence **across consuming products** (Live,
Not yet demonstrated (needs the other services): convergence **across consuming products** (Live,
-Chat, Community do not call VIP yet), and a real Billing/Events round trip on the host.
+Chat, Community do not call VIP yet), and a real Billing/Events round trip on the host (Billing is in
+shadow and has sent VIP no events). The Live import has not been run on production.
## Launch rule
## Launch rule
@@ -281,10 +285,10 @@ This repository does not make the product real, and the domain keeps its placeho
@@ -281,10 +285,10 @@ This repository does not make the product real, and the domain keeps its placeho
following exist (plan §12.12):
following exist (plan §12.12):
1. an owning runtime with health/readiness endpoints and observability — ✔ (`/api/health`, truthful `/api/ready`, `/metrics`);
1. an owning runtime with health/readiness endpoints and observability — ✔ (`/api/health`, truthful `/api/ready`, `/metrics`);
-2. canonical identity/auth integration (Network subjects, scoped service principals) — ✔ in code; the `vip` principal and grants are not provisioned yet;
+2. canonical identity/auth integration (Network subjects, scoped service principals) — ✔; the `vip` principal is provisioned on the host;
3. server-rendered public routes useful without JavaScript — ✔;
3. server-rendered public routes useful without JavaScript — ✔;
-4. real persistence and end-to-end workflows — ✔ against stubs; not yet against the running Billing and Events;
-5. capability and event registration against `OpenVibe.Contracts` — proposed ([docs/](docs/)), not released;
+4. real persistence and end-to-end workflows — ✔ against stubs; not yet against the running Billing and Events (deployed, but Billing is in shadow and checkout is closed);
+5. capability and event registration against `OpenVibe.Contracts` — ✔ v0.19.0;
6. a migration/seed strategy ✔, a security/threat review (notes above; a review by someone else is still due), sitemap/robots ✔ (no feed by design);
6. a migration/seed strategy ✔, a security/threat review (notes above; a review by someone else is still due), sitemap/robots ✔ (no feed by design);
7. acceptance tests proving the advertised functionality — ✔ for VIP itself; cross-product convergence waits for the consumers.
7. acceptance tests proving the advertised functionality — ✔ for VIP itself; cross-product convergence waits for the consumers.
@@ -2,7 +2,8 @@
@@ -2,7 +2,8 @@
"repository": "OpenVibers/OpenVibe.VIP",
"repository": "OpenVibers/OpenVibe.VIP",
"stage": "alpha",
"stage": "alpha",
"code": true,
"code": true,
- "deployed": false,
+ "deployed": true,
+ "deployment": "Deployed internally, not launched: openvibe-ovh /opt/openvibe.vip (release dc98781), unit openvibe-vip, 127.0.0.1:4620 loopback only; https://openvibe.vip still serves the OpenVibe.Sites placeholder. Principal vip; three Events subscriptions for Billing's events; checkout closed (VIP_CHECKOUT_PROVIDERS empty). Production holds 1 creator (network) and 0 plans, perks or memberships. Pins openvibe-contracts v0.19.0, openvibe-sdk v0.4.0, openvibe-shared v1.3.0.",
"plan": "OpenVibe End-to-End Realignment & Implementation Plan, revision 3 (20 Sep 2026)",
"plan": "OpenVibe End-to-End Realignment & Implementation Plan, revision 3 (20 Sep 2026)",
"roadmap": "Wave 10",
"roadmap": "Wave 10",
"works": [
"works": [
@@ -12,13 +13,17 @@
@@ -12,13 +13,17 @@
"API /api/v1 for service and user tokens; consumer client openvibe-vip/client that fails closed",
"API /api/v1 for service and user tokens; consumer client openvibe-vip/client that fails closed",
"server-rendered creator plan pages, terms history, member status and creator dashboard with the shared chrome",
"server-rendered creator plan pages, terms history, member status and creator dashboard with the shared chrome",
"outbox events vip.plan.published and vip.membership.changed (openvibe-sdk)",
"outbox events vip.plan.published and vip.membership.changed (openvibe-sdk)",
- "import of Live's subscription offering, memberships from Billing entitlements"
+ "import of Live's subscription offering, memberships from Billing entitlements",
+ "14 vip.* capabilities, the service manifest and its events registered in openvibe-contracts v0.19.0",
+ "deployed on the host (loopback only) with truthful /api/ready and /metrics; restore drill passed on the host 2026-09-23 05:23 UTC"
],
],
"not_yet": [
"not_yet": [
- "not deployed; openvibe.vip is still an OpenVibe.Sites placeholder",
- "vip.* capabilities and the service manifest are proposals, not in an openvibe-contracts release",
- "Live, Chat and Community do not call VIP yet (consumer integration is the next step)",
+ "not launched: openvibe.vip is still an OpenVibe.Sites placeholder and the service answers on loopback only",
+ "checkout is closed until the Billing cutover (Billing runs in shadow; the owner must re-point the PowerChat webhook first); no billing.* event has reached VIP",
+ "the Live subscription import (scripts/import-live.js) has not been run (vip_migration_maps 0)",
+ "Live, Chat, Community, Blog and Wiki do not call VIP yet (no client, no vip.* grants for them)",
+ "membership badge, card and widget endpoints",
"Billing sells one channel subscription per member and creator: one purchasable plan per creator, no tiers, no network membership product"
"Billing sells one channel subscription per member and creator: one purchasable plan per creator, no tiers, no network membership product"
],
],
- "updated": "2026-09-22"
+ "updated": "2026-09-23"
}
}