openvibers/openvibe.billing STATUS.json

STATUS.json

main 5.0 KB · 47 lines · 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