openvibers/openvibe.billing STATUS.json
STATUS.json
| 1 | { |
| 2 | "repository": "OpenVibers/OpenVibe.Billing", |
| 3 | "stage": "alpha", |
| 4 | "code": true, |
| 5 | "wave": "W8", |
| 6 | "plan": "OpenVibe End-to-End Realignment & Implementation Plan, revision 3 (20 Sep 2026)", |
| 7 | "adr": "ADR-012", |
| 8 | "authoritative": true, |
| 9 | "deployed": true, |
| 10 | "deployment": "The money ledger since the cutover of 2026-10-17 04:50-04:56 UTC (BILLING_AUTHORITY=billing in billing.env and live.env): deployed 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), a person's own Vibes (/api/me/vibes, CORS for OpenVibe's sites), /api/health, /api/ready, /release.json and /webhooks/*. PowerChat deliveries reach /webhooks/powerchat through openvibe.live's /api/powerchat/webhook (proxied by Live's vhost, OpenVibe.Live#172).", |
| 11 | "contracts": "openvibe-contracts v0.419.0", |
| 12 | "sdk": "openvibe-sdk v0.161.0", |
| 13 | "shared": "openvibe-shared v4.237.0", |
| 14 | "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, EXTERNAL PowerChat receipts (billing.receipt.external, announced for OpenVibe.Tips), overflow guards and serializable settlement (PostgreSQL, ADR-035). The cutover (README runbook, docs/live-cutover.md) ran on 2026-10-17: final import 0 new rows, 0 holds, 0 anomalies; reconciliation OK before and after; Live's money tables are read-only behind a database tripwire. OpenVibe.Tips and OpenVibe.VIP launched right after (VIP checkout open). Still due: a small real PowerChat purchase settling end to end after the cutover. Live's payouts, refunds and plans have no tables of their own; where they map is docs/live-mapping.md.", |
| 15 | "features": [ |
| 16 | "append-only double-entry journal in bits and cents, balanced per currency", |
| 17 | "provider receipts stored before processing, settled once (PowerChat, Stripe, PayPal, CCBill, NOWPayments adapters)", |
| 18 | "intents, transfers, refunds, recycle, cashouts with escrow", |
| 19 | "subscriptions and entitlements", |
| 20 | "creator-priced subscription tiers, kept and charged by Billing (OpenVibe.VIP sets them)", |
| 21 | "renewal grace: a failed credit renewal is past_due for BILLING_RENEWAL_GRACE_DAYS (default 3) and retried on its key until grace_until, then expires with grace_ended; set 0 for immediate expiry", |
| 22 | "staff refund of a credit-paid subscription period (POST /api/v1/subscriptions/:id/refund) and reconciliation of every paid period against its charge (subscriptions.period_charged)", |
| 23 | "EXTERNAL PowerChat receipts (billing.receipt.external under BILLING_AUTHORITY=billing)", |
| 24 | "economy freeze", |
| 25 | "hourly reconciliation, ledger against receipts", |
| 26 | "staff console: cashouts, review queue, reconciliation, freeze, audit log", |
| 27 | "public billing policy page", |
| 28 | "Live shadow import", |
| 29 | "openvibe-sdk/events outbox in service_outbox for billing.* events (legacy outbox retained for rollback)", |
| 30 | "per-person limits (openvibe-sdk/limits)", |
| 31 | "usage readings (billing.usage.record)", |
| 32 | "usage rating: a rate card -> the subject's promo allowance -> one usage transaction per reading, under hard budgets (BILLING_RATING_INTERVAL_MS off by default; nothing charged without a loaded card, key usage:<reading key>)", |
| 33 | "promo allowance ledger", |
| 34 | "a person's own Vibes for every site's account menu (/api/me/vibes)", |
| 35 | "Balance held by a person (usd_credit: user:<usr_id>) or a project (project:<prj_id>), with personal and project holds", |
| 36 | "GET /api/me/balance (and the /api/me/credits alias): the person's Balance plus every project they administer, read from Network with Billing's service token", |
| 37 | "moving personal Balance to a project (atomic, idempotent, admin only) and getting Vibes with Balance at the pack value rate", |
| 38 | "GET /api/me/activity: the person's own Balance and Vibes movements with plain labels, two rows for a two-currency transaction, and cursor pagination", |
| 39 | "owner settings: billing.vibes (Vibes Pay, the largest charge, the daily app spend per person and from_balance)", |
| 40 | "network-wide money counts with no person in them, for products' public stats (billing.stats.read)", |
| 41 | "account export and deletion (ADR-033)", |
| 42 | "owner settings: billing.credits (Balance, sandbox, top-up switch/amounts/fee and the hold lease) and billing.vibes (Vibes Pay limits, Get Vibes with Balance) through openvibe-shared/config, with env pins and live changes (D11/D12)", |
| 43 | "Vibes Pay (D12): app-token charges with the app's reference as the idempotency key, the person's pay-sheet routes, the project's Vibes wallet (project_payable) with the project owner's cashout through the existing path, HMAC-SHA256 webhooks from vibes_webhook_outbox retried with backoff, sandbox Vibes gated by BILLING_VIBES_SANDBOX, and the billing.vibes limits and frozen-economy checks" |
| 44 | ], |
| 45 | "updated": "2026-11-13" |
| 46 | } |
| 47 |