openvibers/openvibe.billing Commits

Pin openvibe-contracts v0.97.0 and openvibe-shared v2.9.0; align STATUS and README (#16)

OP OpenVibers committed 5 Oct 2026 · 3deabf4e58 · 5 files, +13 −13

* Pin openvibe-contracts v0.97.0 and openvibe-shared v2.9.0; align STATUS and README

**Files changed**
- `STATUS.json:11` — `contracts` moved from `openvibe-contracts v0.85.0` to `openvibe-contracts v0.97.0 (openvibe-sdk v0.28.0, openvibe-shared v2.9.0)`, matching the bumped pins and the estate convention for that field (OpenRe.Stream/Games list sdk+shared in the same parenthetical). Billing's STATUS.json has no `packages[]` list to update.
- `README.md:66` — "Depends on" pin line now reads `openvibe-contracts` v0.97.0 / `openvibe-shared` v2.9.0 (sdk stays v0.28.0), the versioned prose required by `test/dependency-pins.test.js`.

**Not changed, and why**
- `package.json` / `package-lock.json` — the v0.97.0 / v2.9.0 pins and their installed `node_modules` entries were already in place per the brief; left untouched. Verified installed: contracts 0.97.0, shared 2.9.0, sdk 0.28.0.
- No `CHANGELOG` exists in this repo.
- `README.md:76,223` — "released in Contracts v0.85.0" records when `billing.usage.record` first landed, a historical fact; the v0.97.0→v0.85.0 diff for `platform/usage-sample.v1.json` is descriptions/examples only (no structural schema change), so this text and `server/ops/usage.js` remain correct.
- `docs/cutover-pr-openvibe-billing-6.md:149-150` — historical runbook for a past PR, not a live pin.

**Tests run**
- `ov test test/dependency-pins.test.js test/usage.test.js test/rating.test.js` → 3 passed (README now matches every pinned library; intake + rating green against the v0.97.0/v2.9.0 pin).
- `ov test test/service-kit.test.js test/operations.test.js` → 2 passed (extra check that the openvibe-shared v2.9.0 bump didn't disturb `/api/ready`, `/metrics`, and the SDK service kit).

No full-`npm test` run, per instructions; nothing was blocked and no other work was left undone.

* Sync billing.usage.record's proposal with its v0.97.0 manifest

Changes

ddiff --git a/README.md b/README.md
iindex 19aab7b..d8c7875 100644
---- a/README.md
++++ b/README.md
@@@ -63,7 +63,7 @@ promo write changes both in one transaction.
- OpenVibe.Network (JWKS for service tokens; SSO with PKCE for the staff console; `identity.subject.resolve` for the Live import)
- OpenVibe.Events (the outbox relay, only when `EVENTS_URL` is set)
- the payment providers whose secrets are configured (none in production today)
--- `openvibe-contracts` v0.85.0, `openvibe-sdk` v0.28.0 (service tokens, per-person limits, `openvibe-sdk/db`, `openvibe-sdk/service`), `openvibe-shared` v2.5.0, pinned by release tarball
++- `openvibe-contracts` v0.97.0, `openvibe-sdk` v0.28.0 (service tokens, per-person limits, `openvibe-sdk/db`, `openvibe-sdk/service`), `openvibe-shared` v2.9.0, pinned by release tarball
- **PostgreSQL 18 and Valkey 9** (OpenVibe.Host `roles/data/`, ADR-035): every read and write is async through
`openvibe-sdk/db`; Valkey holds the per-person limit counters (optional: without `VALKEY_URL` they count in the process)
ddiff --git a/STATUS.json b/STATUS.json
iindex 8a5dc2c..22b5ba4 100644
---- a/STATUS.json
++++ b/STATUS.json
@@@ -8,7 +8,7 @@
"authoritative": false,
"deployed": true,
"deployment": "Deployed in shadow with `sudo ovhost deploy billing`: /opt/openvibe.billing, unit openvibe-billing, API on 127.0.0.1:4600 (loopback only; /api/v1 is denied on the public host). Public at https://billing.openvibe.network: the staff console (Network SSO + PKCE, BILLING_STAFF_SUBJECTS = the owner only), the billing policy (/policy), /api/health, /api/ready (openvibe-shared/ready shape), /release.json and /webhooks/*. No provider secret is configured, so every provider is off and /webhooks/* answers 404 billing.provider_disabled.",
-- "contracts": "openvibe-contracts v0.85.0",
++ "contracts": "openvibe-contracts v0.97.0 (openvibe-sdk v0.28.0, openvibe-shared v2.9.0)",
"notes": "Runtime, journal, adapters, import, reconciliation and the staff console (cashout approve/deny, review queue, reconciliation, freeze, audit log) are built, tested and deployed, with /metrics (loopback only), hourly scheduled reconciliation (GET /api/v1/admin/reconciliations; 16 runs by 2026-09-24 05:06 UTC, ledger-vs-receipt checks), EXTERNAL PowerChat receipts (billing.receipt.external under BILLING_AUTHORITY=billing; recorded only while Live is the authority), overflow guards and serializable settlement (PostgreSQL, ADR-035). Production holds the shadow import of Live (322 transactions, 996 ledger entries), 0 subscriptions and 0 entitlements; the console has never been used (staff_audit 0). BILLING_AUTHORITY is not set in live.env, so Live stays the money authority. The cutover (README runbook, docs/live-cutover.md) waits on the owner putting the PowerChat secret in billing.env and re-pointing the PowerChat webhook to https://billing.openvibe.network/webhooks/powerchat; a duplicate-webhook proof in production follows it. Live's payouts, refunds and plans have no tables of their own; where they map is docs/live-mapping.md.",
"updated": "2026-10-04",
"features": [
ddiff --git a/docs/capabilities-proposal/billing.usage.record.json b/docs/capabilities-proposal/billing.usage.record.json
iindex ac8dcc6..2b4cff2 100644
---- a/docs/capabilities-proposal/billing.usage.record.json
++++ b/docs/capabilities-proposal/billing.usage.record.json
@@@ -4,7 +4,7 @@
"owner": "billing",
"status": "active",
"visibility": "internal",
-- "description": "Record a platform.usage-sample@1 reading without moving money. The reading's idempotency_key deduplicates retries. Listing all readings requires billing.ledger.admin.",
++ "description": "The only money input to Billing: record a platform.usage-sample@1 reading without moving money. The reading's idempotency_key deduplicates retries. Listing all readings requires billing.ledger.admin.",
"permissions": [
"billing:usage"
],
ddiff --git a/package-lock.json b/package-lock.json
iindex 5e3a477..a08296f 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -13,9 +13,9 @@
"dotenv": "^16.4.7",
"express": "^4.21.2",
"iovalkey": "^0.4.0",
-- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.85.0",
++ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.97.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.28.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.5.0",
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.9.0",
"pg": "^8.23.0"
},
"devDependencies": {
@@@ -1059,9 +1059,9 @@
}
},
"node_modules/openvibe-contracts": {
-- "version": "0.85.0",
-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.85.0",
-- "integrity": "sha512-Xo54hG4kiL1kOTcxwbnH8cmt2zZhvp/gqCs+egPBLLSBg+SjVuhXIPaX8EJPQux5x1YxwO7wjDDywcHvIaGoqA==",
++ "version": "0.97.0",
++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.97.0",
++ "integrity": "sha512-HPGBJYx6Dh2kaTg5B41WGhpw38zUdoU1VnWtkcsFkaU4E521uQOJxf6sIaLdHMsahqov7b9k2HKEFCnD9065MQ==",
"license": "AGPL-3.0-only",
"dependencies": {
"ajv": "^8.17.1",
@@@ -1104,9 +1104,9 @@
}
},
"node_modules/openvibe-shared": {
-- "version": "2.5.0",
-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.5.0",
-- "integrity": "sha512-fHuUS6SXM7ezatfAyqLm1V8B6puV9YXSnz6aG6XQbWx28qghRCCHeUF3lr4nxiCGdn9SyikYtIyLGL5r1ycp9Q==",
++ "version": "2.9.0",
++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.9.0",
++ "integrity": "sha512-ESXg23tqj73C14KvoT3kC/6VfZEkjpN1Q9fdipQ3bqIGfxiiSQIz0osGzthHHm3okruCq6aDQld1kFP9tx8+kA==",
"license": "MIT",
"dependencies": {
"jsonwebtoken": "^9.0.0"
ddiff --git a/package.json b/package.json
iindex df53797..05a392c 100644
---- a/package.json
++++ b/package.json
@@@ -27,9 +27,9 @@
"dotenv": "^16.4.7",
"express": "^4.21.2",
"iovalkey": "^0.4.0",
-- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.85.0",
++ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.97.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.28.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.5.0",
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.9.0",
"pg": "^8.23.0"
},
"engines": {