Commits
-
Merge pull request #9 from OpenVibers/agent/billing-t5-step-8-b1-openvibe-billing-171236-muu2wv8cOpenVibers · 4 Oct 2026
1442e67 -
Compare only money fields when a usage reading is replayedOpenVibers · 4 Oct 2026
2de3a1d -
Merge pull request #8 from OpenVibers/agent/billing-t5-step-6-openvibe-billing-135446-mutvugksOpenVibers · 4 Oct 2026
d54c21b -
Rate stored usage readings into the ledger under hard budgetsOpenVibers · 4 Oct 2026
6bebb8f -
Add a promo allowance ledger that never becomes creator money (#7)OpenVibers · 4 Oct 2026
578a21b -
Record usage readings under billing.usage.record (#6)OpenVibers · 4 Oct 2026
75f86b6 -
Bump openvibe-shared v2.3.1 → v2.5.0 (#4)OpenVibers · 3 Oct 2026
691d538 -
Declare billing.usage.record in repo docs and note usage keying (#5)OpenVibers · 3 Oct 2026
37ae329 -
Merge pull request #2 from OpenVibers/agent/bump-openvibe-shared-v2.3.1-mupva2qhOpenVibers · 1 Oct 2026
d08ade0 -
Bump openvibe-shared v1.28.0 → v2.3.1OpenVibers · 1 Oct 2026
794e115 -
A provider event that updates a payment intent or a subscription is marked processed only when the update committed: applyPlan called the async plan.apply without awaiting it (the PostgreSQL move made it async), so it ran after the event's transaction had stamped processed_at, the provider was told it succeeded, and a failure was an unhandled rejection with the update lost. It is awaited inside the transaction; a failure rolls the stamp back, records last_error and is retried by processPending. test/provider-update-tx.test.js: a rejecting update leaves the event unprocessed with its error (fails on the old code), a successful one still applies. No other dropped promise in server/ (full scan). Found by the estate-wide floating-promise sweep; fixed by DeepSeek, reviewed by Claude. npm test 20/20. npm test 20/20 test files passed.OpenVibers · 29 Sept 2026
1dd658e -
The SQLite era is gone (on PostgreSQL since 2026-09-28; no compatibility kept): the one-time migrate-to-postgres script, the *_DB_PATH settings (config, .env.example, systemd unit, test helpers), the unused better-sqlite3 dependency and its lockfile entries, and docs, docstrings and STATUS lines about SQLite or its rollback window. Reviewed independently (VERDICT: SHIP). npm test 19/19 test files passed.OpenVibers · 29 Sept 2026
fe4ff08 -
scripts/reconcile.js: its comment names the ledger it reconciles (DATABASE_URL), not the SQLite path.OpenVibers · 28 Sept 2026
67a10d7 -
Billing on PostgreSQL (ADR-035, roadmap WS-X2): openvibe-sdk/db, async throughout, every money movement serializable.OpenVibers · 28 Sept 2026
5fc1af3 -
npm test no longer counts a skipped test as passed (roadmap WS-Q task 7; openvibe-shared/test-runner, Shared v1.25.0). test/run.js counted every file that exited 0 as passed, so a file that printed that it skipped its work and checked nothing still read as green. It is now the shared runner (same files, one at a time as before, 60 s timeout per file): a test prints "<label>: skipped (<why>)" for what it could not run, and that file is listed with ○ and its reasons and not counted as passed; --strict makes a skip fail the run. No test here skips anything. openvibe-shared is pinned at v1.25.0 (from v1.22.0; 1.23 and 1.24 add the web runtime, release-watch fixes and the readiness skip, and /api/ready answers as before because its db check really runs; the README follows). npm test (Node 22) 19/19.OpenVibers · 28 Sept 2026
1f9df56 -
README and STATUS.json are current (roadmap WS-U task 3): the README gains Owns, Does not own, Depends on, Capabilities (the eight billing.* capabilities, their callers, and the grants Billing uses at Events and Network), Acceptance (what each test file proves), Security (SECURITY.md, auth, money integrity, webhooks, secrets by name, egress) and Deploy (sudo ovhost deploy billing, unit, port, env file, state, vhost, rollback) sections; the launch rule counts the public /policy page. STATUS.json gains deployed, contracts and features, drops a stale release sha and old pins from the deployment note, and is updated 2026-09-28.OpenVibers · 28 Sept 2026
f24684b -
Per-person rate limits on Billing's money-creating routes (roadmap WS-R task 4; openvibe-sdk v0.12.0 is now a dependency). Every /api/v1 caller is a first-party service (Live, Tips, VIP) acting for many people, so server/api/actor-limits.js never counts per service. A request counts against the person its body names (the buyer, the payer, the creator, the subscriber), whichever service sends it, and a refund counts against the payer of the transfer it gives back. The limit runs after the capability and freeze checks (a request refused while frozen is not counted) and before the idempotency store and the ledger. A refusal therefore stores nothing, and the same Idempotency-Key works after Retry-After. Past a limit a route answers 429 problem+json rate_limited with Retry-After, logs one line and counts billing_rate_limited_total{limit,window}. BILLING_LIMITS=off turns every limit off, as a rollback lever that needs no deploy.OpenVibers · 28 Sept 2026
80f97aa -
Policy page: the price-tier table's horizontal scroller is keyboard-reachable (tabindex=0, role=region, a label and a focus ring). axe scrollable-region-focusable (serious) on /policy, found by Host's new release UX check (ovhost browser-watch).OpenVibers · 26 Sept 2026
db8109c -
Pins: openvibe-shared 1.20.0 -> 1.22.0 (realtime notification badge, off until a site turns it on; the unreachable-host browser check)OpenVibers · 26 Sept 2026
180e246 -
Open redirect fixed (roadmap WS-R task 5): the sign-in next let "/<TAB>/evil.com" through, which browsers read as "//evil.com" (they drop tab and newline characters and read a backslash as "/"); any control character or backslash in next now goes home. test/open-redirect.test.js feeds it the known bypassesOpenVibers · 26 Sept 2026
92edcae -
Pins: openvibe-shared 1.18.0 -> 1.20.0 (the update matrix and release manifest 1.2.0: client generations, the shell)OpenVibers · 26 Sept 2026
3d858ee -
Pins: openvibe-shared 1.17.1 -> 1.18.0 (update telemetry: prompted count, sessions by generation)OpenVibers · 26 Sept 2026
876b010 -
Pins: openvibe-shared 1.16.1 -> 1.17.1 (release notifications)OpenVibers · 26 Sept 2026
5c1d552 -
Pins: openvibe-shared 1.16.0 -> 1.16.1 (the OV mark stops animating when idle, hidden or off-screen)OpenVibers · 26 Sept 2026
8494483 -
Pins: openvibe-shared 1.13.0 -> 1.16.0OpenVibers · 26 Sept 2026
04c0ae8 -
nginx vhost: the public policy (/policy, /policy.json, /robots.txt) is served without the host-wide X-Robots-Tag noindex, as robots.txt and the app intend (the browser check found production's /policy noindex); that location repeats nosniff and HSTS because a location's add_header replaces the server's. test/nginx-vhost.test.js. Takes effect when the vhost is next installed (not deployed here)OpenVibers · 26 Sept 2026
5fa5546 -
/policy: a canonical link (config.baseUrl + /policy) and the network's app icon inline (openvibe-shared/app-icon), so the browser no longer asks the API for /favicon.ico and logs its 404 on every visit; both found by the browser check (Host scripts/browser-check.js, WS-Q task 3)OpenVibers · 26 Sept 2026
f7ff3cd -
.env.example: names with a working default are commented (optional), so ovhost validate's from-example check requires only what the service cannot run withoutOpenVibers · 26 Sept 2026
4a5cddf -
Policy: the terms link goes to openvibe.network/terms (the /legal/terms path does not exist)OpenVibers · 26 Sept 2026
2bc0cd0 -
Console test: robots.txt allows the public /policy and nothing elseOpenVibers · 26 Sept 2026
8ca3039