{"id":"pst_01M44A5E9G3S519P3WCHF0HDGV","url":"https://openvibe.blog/@openvibe/patch-notes-rate-stored-usage-readings-into-the-ledger-under-hard-budgets","blog":{"id":"blg_01M362MF0EDJ7QHQTRD8A3Q981","handle":"openvibe","title":"The OpenVibe blog","url":"https://openvibe.blog/"},"title":"Patch notes: Rate stored usage readings into the ledger under hard budgets","summary":"What shipped on OpenVibe on 2026-10-04: 63 changes to OpenVibe.Games, OpenVibe.Community, OpenVibe.Media, OpenVibe.Reviews, OpenVibe.Network, OpenVibe.AI and 14 more.","body_markdown":"What shipped on OpenVibe on 2026-10-04: 63 changes to OpenVibe.Games, OpenVibe.Community, OpenVibe.Media, OpenVibe.Reviews, OpenVibe.Network, OpenVibe.AI and 14 more. Every line below is a commit message from the OpenVibers repositories, linked to the change itself.\n\n## Highlights\n\n- **OpenVibe.Billing:** Rate stored usage readings into the ledger under hard budgets ([`6bebb8f`](https://github.com/OpenVibers/OpenVibe.Billing/commit/6bebb8f37ad1d73cefeb000b18727eefa3a8f4b3))\n- **OpenVibe.Network:** Accept the user-owned trust class in resource offers and node principals ([`b576490`](https://github.com/OpenVibers/OpenVibe.Network/commit/b576490716a210ecf2836d957831869e46b11eb0))\n- **OpenVibe.Tips:** Deliver paid chat effects through OpenVibe.Chat's ingress ([`1facb91`](https://github.com/OpenVibers/OpenVibe.Tips/commit/1facb910d2377cb275fb27c238c876157135b9f1))\n- **OpenVibe.AI:** Show each run's usage reading state in explain and free allowance on… ([`39673b5`](https://github.com/OpenVibers/OpenVibe.AI/commit/39673b5de5f0d7e69955aaffc96a0432c8964147))\n- **OpenVibe.Media:** Pack durable CMAF segments into ~60 s chunks and serve them as ranges ([`3573f61`](https://github.com/OpenVibers/OpenVibe.Media/commit/3573f6150799124cddd8e5b09145532513650d15))\n- **OpenVibe.Games:** Check protocol version before content digest and reject mod-pack maps ([`357d7a1`](https://github.com/OpenVibers/OpenVibe.Games/commit/357d7a109265752da32a8d9dae5228a1f025f9db))\n\n## OpenVibe.Games\n\n[openvibe.games](https://openvibe.games) · [repository](https://github.com/OpenVibers/OpenVibe.Games)\n\n- Gate joins on content digests and load Scraplandia's default map ([`6a1f3a3`](https://github.com/OpenVibers/OpenVibe.Games/commit/6a1f3a30b8e4f0a364ca03818e1b36b358a2b8d5))\n- Fix content pack typings and the digest-less hello test assertion ([`d329c8a`](https://github.com/OpenVibers/OpenVibe.Games/commit/d329c8a31f53ed3e85b18ec1777ce6b9a182d973))\n- Assert the default Scraplandia map is present in the map pack test ([`47887cd`](https://github.com/OpenVibers/OpenVibe.Games/commit/47887cd6d9acd1944f2f0f64180100dfbbae593c))\n- Close Alice in on Bob before the slice test's melee swing ([`10682f6`](https://github.com/OpenVibers/OpenVibe.Games/commit/10682f61b05c21761d32fb64ffb8b3ea7426fe23))\n- Check protocol version before content digest and reject mod-pack maps ([`357d7a1`](https://github.com/OpenVibers/OpenVibe.Games/commit/357d7a109265752da32a8d9dae5228a1f025f9db))\n- Add touch controls that drive the same input stream as the keyboard ([`49e561b`](https://github.com/OpenVibers/OpenVibe.Games/commit/49e561baf306a8901f4b5ed7440c0a910ff46774))\n- Fight back at thug-camped loot sites so extraction holds ([`e4efaee`](https://github.com/OpenVibers/OpenVibe.Games/commit/e4efaee83333bcce66eec56395aa5536240e2e2e))\n- Apply Prettier formatting to drifted sources, tests and CI workflow ([`f9fb616`](https://github.com/OpenVibers/OpenVibe.Games/commit/f9fb616c2716023828b809851099a42bf4311db4))\n- Run games-quickjs@1 pack mods in budgeted per-mod QuickJS sandboxes ([`5c34a9e`](https://github.com/OpenVibers/OpenVibe.Games/commit/5c34a9eb2784a965d4ed348d907286b46b0a4f82))\n- Add cutover runbook for games-content@2 mod runtime ([`02eebd7`](https://github.com/OpenVibers/OpenVibe.Games/commit/02eebd7480664a67e82a5a511b26611e2c1ffdfe))\n\n## OpenVibe.Community\n\n[openvibe.community](https://openvibe.community) · [repository](https://github.com/OpenVibers/OpenVibe.Community)\n\n- Use shared cache policy for Community asset and page headers (#4) ([`2d7d05b`](https://github.com/OpenVibers/OpenVibe.Community/commit/2d7d05ba070fd3e410759b144af60c4f7282cd59))\n- Poll the relay inbound API for the recorded failure before asserting it (#13) ([`19f69bd`](https://github.com/OpenVibers/OpenVibe.Community/commit/19f69bd4672523d735d990359265a0256e08b874))\n- Render every Community page through openvibe-shared/shell v2.6.0 ([`452ab04`](https://github.com/OpenVibers/OpenVibe.Community/commit/452ab04ebb15ceb390393f682feb2f3860ae2174))\n- Raise the home page JS budgets for the shell's web-runtime.js ([`99551e2`](https://github.com/OpenVibers/OpenVibe.Community/commit/99551e26aebb15d5a8c2ac08ff4f3e40d5579a91))\n- Let each space have its own moderators who moderate only that space ([`4c08128`](https://github.com/OpenVibers/OpenVibe.Community/commit/4c08128108749ace8348b881489674e303ee1e12))\n- Add rehearsal, backup, verification and rollback to the 0005 cutover… ([`a522be9`](https://github.com/OpenVibers/OpenVibe.Community/commit/a522be9e3ef95256d3595a7570e33030364c2ab8))\n\n## OpenVibe.Media\n\n[openvibe.media](https://openvibe.media) · [repository](https://github.com/OpenVibers/OpenVibe.Media)\n\n- Index video objects as CMAF segments and serve HLS from the timeline ([`214a810`](https://github.com/OpenVibers/OpenVibe.Media/commit/214a810a1d3e5a1afcf3b934f95cf18b9e65d480))\n- Version cmaf segment keys and delete old bytes only after commit ([`d62f988`](https://github.com/OpenVibers/OpenVibe.Media/commit/d62f988acfefbdc43e62a1cfb5c00b5f9d649b5b))\n- Drop unused generateSlug re-export from pastes routes; mark F1/F2… ([`25ab0c0`](https://github.com/OpenVibers/OpenVibe.Media/commit/25ab0c0cdb6a7a6db1ae96343af45e3a5db1bf57))\n- Pack durable CMAF segments into ~60 s chunks and serve them as ranges ([`3573f61`](https://github.com/OpenVibers/OpenVibe.Media/commit/3573f6150799124cddd8e5b09145532513650d15))\n- Classify pack and packed-segment range fetches in the SSRF inventory ([`535d29b`](https://github.com/OpenVibers/OpenVibe.Media/commit/535d29b7c7016ae730577514ad3ba8c83e061c44))\n- Retry cmaf with no healthy provider and guard races with pack ([`a1aebee`](https://github.com/OpenVibers/OpenVibe.Media/commit/a1aebee3ec9bd6ba13da17d09c2ce4cfe104b06a))\n\n## OpenVibe.Reviews\n\n[openvibe.reviews](https://openvibe.reviews) · [repository](https://github.com/OpenVibers/OpenVibe.Reviews)\n\n- Style the shared layout's skip link with the .skip class ([`b25cf3f`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/b25cf3f05fed680acbebb78d03a5b8c0f120d0c0))\n- Style the skip link under both the rv-skip and skip classes ([`e7f36b7`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/e7f36b72824788eb92de51d6517ab4535bb782f2))\n- Render Reviews pages through openvibe-publishing/layout shell ([`0b3aa79`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/0b3aa79a94572bed40c9f7554d719cb11804aad3))\n- Pin the openvibe-publishing tarball integrity in the lockfile ([`a81b835`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/a81b8350c1d87cefc7b016aa1d3744c5cacd2cde))\n- Style the shell's skip link so it only shows on focus ([`7e2ca6a`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/7e2ca6ac85c01703cbd437155cdacbfe1fda1895))\n- Merge main into agent/reviews-t11-step-2-second-batch-132723-mutuv7g1 (auto-finish) ([`1bf1451`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/1bf14513f9f499de4fe18551a677831c4dd077bf))\n\n## OpenVibe.Network\n\n[openvibe.network](https://openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Network)\n\n- Serve agent reads and confirmations to owning services on the internal… ([`98d5400`](https://github.com/OpenVibers/OpenVibe.Network/commit/98d540060a591e180e8bb023a2116476c1fcd951))\n- Expire approved-unused confirmations on cancel and drop Trade Events… ([`2dbfa1a`](https://github.com/OpenVibers/OpenVibe.Network/commit/2dbfa1ad009208fd03976030c8c36c5bc86bc3e3))\n- Issue agent tokens and publish confirmation decision events ([`eb3bde5`](https://github.com/OpenVibers/OpenVibe.Network/commit/eb3bde5159d03b6e28cdd67cacc816ba896f6a56))\n- Accept the user-owned trust class in resource offers and node principals ([`b576490`](https://github.com/OpenVibers/OpenVibe.Network/commit/b576490716a210ecf2836d957831869e46b11eb0))\n- Grant the tools service billing.usage.record on the Billing audience ([`2a86229`](https://github.com/OpenVibers/OpenVibe.Network/commit/2a86229703865ef184a137b8e311c6cff3b8b017))\n\n## OpenVibe.AI\n\n[ai.openvibe.network](https://ai.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.AI)\n\n- Claim the provider free allowance per subject before pricing usage ([`dde3bec`](https://github.com/OpenVibers/OpenVibe.AI/commit/dde3bec6b2a1d33035b9ba59e24a19b53cc30f8f))\n- Show each run's usage reading state in explain and free allowance on… ([`39673b5`](https://github.com/OpenVibers/OpenVibe.AI/commit/39673b5de5f0d7e69955aaffc96a0432c8964147))\n- Return the run's usage readings in explain on every run response ([`789c21e`](https://github.com/OpenVibers/OpenVibe.AI/commit/789c21e62f80fd969fae50e93bee9d90bf2e86d9))\n- Hold govern tier budgets in Valkey and claim free allowance there ([`e7880ca`](https://github.com/OpenVibers/OpenVibe.AI/commit/e7880cae84ad0d354714db2d82820ad8ad4ed702))\n\n## OpenVibe.Tools\n\n[openvibe.tools](https://openvibe.tools) · [repository](https://github.com/OpenVibers/OpenVibe.Tools)\n\n- Docs: close out the T8 PostgreSQL cutover (README + evidence + guard) ([`5a1f33e`](https://github.com/OpenVibers/OpenVibe.Tools/commit/5a1f33e05650a5f1571997391dd63aed758a1631))\n- Post one Billing usage reading per ended tool job ([`c3c7cc5`](https://github.com/OpenVibers/OpenVibe.Tools/commit/c3c7cc530da26b426004fe475e70bd88357ecd26))\n- Review the Billing client as an outbound call site in the SSRF ratchet ([`aca5a9d`](https://github.com/OpenVibers/OpenVibe.Tools/commit/aca5a9d4ef9722add0b90f559b30794192cf1870))\n- Stop the Billing readings tick when Network refuses a token ([`c8a0c1f`](https://github.com/OpenVibers/OpenVibe.Tools/commit/c8a0c1fd93856295e447b886da97784580b20307))\n\n## OpenVibe.Billing\n\n[billing.openvibe.network](https://billing.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Billing)\n\n- Add a promo allowance ledger that never becomes creator money (#7) ([`578a21b`](https://github.com/OpenVibers/OpenVibe.Billing/commit/578a21bcc127feab6cd19b4977349370a75672ae))\n- Rate stored usage readings into the ledger under hard budgets ([`6bebb8f`](https://github.com/OpenVibers/OpenVibe.Billing/commit/6bebb8f37ad1d73cefeb000b18727eefa3a8f4b3))\n- Compare only money fields when a usage reading is replayed ([`2de3a1d`](https://github.com/OpenVibers/OpenVibe.Billing/commit/2de3a1d7b2924d083ba2cfff1fd093a3dde2e511))\n\n## OpenVibe.News\n\n[openvibe.news](https://openvibe.news) · [repository](https://github.com/OpenVibers/OpenVibe.News)\n\n- Render every page through openvibe-publishing/layout on shared shell ([`cd8d193`](https://github.com/OpenVibers/OpenVibe.News/commit/cd8d193bad09cebcca5144cc11183d99352511ab))\n- Drop temp capture script and sync package version claims in docs ([`4a21179`](https://github.com/OpenVibers/OpenVibe.News/commit/4a21179de62e20e452b7ee43a9198c6f97fa105b))\n- Restore the openvibe-publishing sha512 integrity in the lockfile ([`38828d8`](https://github.com/OpenVibers/OpenVibe.News/commit/38828d8d1b1ad6a01219f60706c33bb5f8dc1bfd))\n\n## OpenVibe.Wiki\n\n[openvibe.wiki](https://openvibe.wiki) · [repository](https://github.com/OpenVibers/OpenVibe.Wiki)\n\n- Render every page through openvibe-publishing/layout on the shared shell ([`282b86a`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/282b86a326eabb6a9cbf31de335a2e1fa27ba45e))\n- Pin the openvibe-publishing v1.2.0 tarball integrity in the lockfile ([`1486fd5`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/1486fd549d95c9901e51f93b549eaf4f8a0df2a3))\n- Style the shell's skip link so it only shows on focus ([`019269b`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/019269b6e7539926819fc25439b09d4718642e27))\n\n## OpenVibe.Codes\n\n[openvibe.codes](https://openvibe.codes) · [repository](https://github.com/OpenVibers/OpenVibe.Codes)\n\n- Render every Codes page through openvibe-shared/shell v2.6.0 ([`cd29b7e`](https://github.com/OpenVibers/OpenVibe.Codes/commit/cd29b7e94c1be459c3aa43ce1dec680808bd8519))\n- Say usage counts are hourly reports and cost is on Billing ([`0dceae7`](https://github.com/OpenVibers/OpenVibe.Codes/commit/0dceae756e65494eaa26fd5187c801ce43dfe722))\n\n## OpenVibe.Deals\n\n[openvibe.deals](https://openvibe.deals) · [repository](https://github.com/OpenVibers/OpenVibe.Deals)\n\n- Render every page through openvibe-publishing/layout on shared shell ([`79ee3d8`](https://github.com/OpenVibers/OpenVibe.Deals/commit/79ee3d8ee76bac5fdf51973d89ba1269b8ea8329))\n- Restore openvibe-publishing v1.2.0 lock integrity and guard codeload… ([`f7cb264`](https://github.com/OpenVibers/OpenVibe.Deals/commit/f7cb2646d59179088fff268cffecd070565d3f0e))\n\n## OpenVibe.Search\n\n[search.openvibe.network](https://search.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Search)\n\n- Render Search pages through openvibe-shared/shell with a hashed inline… ([`a732124`](https://github.com/OpenVibers/OpenVibe.Search/commit/a732124c29b2d51e3d27c5bdf607765f8cf3730b))\n- Notify saved searches of new matches through Network behind a flag ([`de3bc9f`](https://github.com/OpenVibers/OpenVibe.Search/commit/de3bc9f19e5adcf3d4e9fc5f7d1be9c10658b54e))\n\n## OpenVibe.Blog\n\n[openvibe.blog](https://openvibe.blog) · [repository](https://github.com/OpenVibers/OpenVibe.Blog)\n\n- Render every Blog page through openvibe-publishing/layout on shell ([`281b384`](https://github.com/OpenVibers/OpenVibe.Blog/commit/281b3843b54fcc702a9789f8014f2d900df448a4))\n\n## OpenVibe.Chat\n\n[openvibe.chat](https://openvibe.chat) · [repository](https://github.com/OpenVibers/OpenVibe.Chat)\n\n- Implement the additive Chat-owned ingress described by Live T3… (#16) ([`c88d581`](https://github.com/OpenVibers/OpenVibe.Chat/commit/c88d5814d7df844a4683f1eb9e26b8c142eb2613))\n\n## OpenVibe.Coupons\n\n[openvibe.coupons](https://openvibe.coupons) · [repository](https://github.com/OpenVibers/OpenVibe.Coupons)\n\n- Render pages through openvibe-publishing/layout on shared shell v2.6.0 ([`c845eea`](https://github.com/OpenVibers/OpenVibe.Coupons/commit/c845eeac4f4c6286aba2617fc45e1f826cc881bd))\n\n## OpenVibe.Events\n\n[events.openvibe.network](https://events.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Events)\n\n- Add the nats-js-v1 JetStream STREAM carrier over the PostgreSQL record ([`10b286c`](https://github.com/OpenVibers/OpenVibe.Events/commit/10b286c14a2c6e05eb5d43784365593afe4cb62e))\n\n## OpenVibe.Tips\n\n[openvibe.tips](https://openvibe.tips) · [repository](https://github.com/OpenVibers/OpenVibe.Tips)\n\n- Deliver paid chat effects through OpenVibe.Chat's ingress ([`1facb91`](https://github.com/OpenVibers/OpenVibe.Tips/commit/1facb910d2377cb275fb27c238c876157135b9f1))\n\n## OpenVibe.Trade\n\n[openvibe.trade](https://openvibe.trade) · [repository](https://github.com/OpenVibers/OpenVibe.Trade)\n\n- Render every page through openvibe-publishing/layout on shell v2.6.0 ([`8efb890`](https://github.com/OpenVibers/OpenVibe.Trade/commit/8efb8906a3dd391e9ba2287e63b1b57638b0bdc7))\n\n## OpenVibe.VIP\n\n[openvibe.vip](https://openvibe.vip) · [repository](https://github.com/OpenVibers/OpenVibe.VIP)\n\n- Render every VIP page through openvibe-shared/shell v2.6.0 ([`e5b7078`](https://github.com/OpenVibers/OpenVibe.VIP/commit/e5b7078087de97aea30c100a99b1a00208fadb53))\n\n---\n\nPatch notes are put together automatically when enough changes have shipped, or when a large feature lands. See every site's own updates page for the live list.","revision":1,"state":"published","visibility":"public","published_at":"2026-10-04T20:37:24.418Z","revised_at":"2026-10-04T20:37:24.406Z","author":{"subject":"usr_01KKT9AC60KM7CRTB3WN1Z8P56","name":"goosely","username":"goosely"},"authorship":{"mode":"imported","workflow":null,"reviewed":false,"disclosure":{"mode":"imported","short":"Imported","long":"Imported from Commit messages from the OpenVibers repositories on GitHub; originally by OpenVibers."}},"tags":["patch-notes","games","community","media","reviews","network","ai","tools","billing","news","wiki"],"categories":[],"series":{"title":"Patch notes","url":"https://openvibe.blog/@openvibe/series/patch-notes","position":null},"media":[],"citations":[],"indexability":{"indexable":true,"robots":"index, follow","reasons":[]}}