{"id":"pst_01M3MQBE6W834TDZVTBSE087KZ","url":"https://openvibe.blog/@openvibe/patch-notes-wiki-moves-to-postgresql-and-valkey","blog":{"id":"blg_01M362MF0EDJ7QHQTRD8A3Q981","handle":"openvibe","title":"The OpenVibe blog","url":"https://openvibe.blog/"},"title":"Patch notes: Wiki moves to PostgreSQL and Valkey","summary":"What shipped on OpenVibe on 2026-09-28: 41 changes to OpenVibe.Host, OpenVibe.AI, OpenVibe.Blog, OpenVibe.Codes, OpenVibe.Coupons, OpenVibe.Deals and 9 more.","body_markdown":"What shipped on OpenVibe on 2026-09-28: 41 changes to OpenVibe.Host, OpenVibe.AI, OpenVibe.Blog, OpenVibe.Codes, OpenVibe.Coupons, OpenVibe.Deals and 9 more. Every line below is a commit message from the OpenVibers repositories, linked to the change itself.\n\n## Highlights\n\n- **OpenVibe.Wiki:** Wiki moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`ec90476`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/ec90476740eb6026e965d5aceae048d24b6a73d9))\n- **OpenVibe.Blog:** Blog moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`8c8259f`](https://github.com/OpenVibers/OpenVibe.Blog/commit/8c8259f53c5451db55fb62d929b81b10c017c8f2))\n- **OpenVibe.News:** News moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`cf653dd`](https://github.com/OpenVibers/OpenVibe.News/commit/cf653ddb033e65e788b15ab73c7af3a31914e336))\n- **OpenVibe.Deals:** Deals moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`69d3e47`](https://github.com/OpenVibers/OpenVibe.Deals/commit/69d3e473237be050816f8a7f50a495e50b516cff))\n- **OpenVibe.Coupons:** Coupons moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`040dc3e`](https://github.com/OpenVibers/OpenVibe.Coupons/commit/040dc3e3b7cffb01feb8b05885fcb1f0e2c4a95f))\n- **OpenVibe.Trade:** Trade moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`e140fcb`](https://github.com/OpenVibers/OpenVibe.Trade/commit/e140fcbf3203975999879d8ec3536b78f2915e85))\n- **OpenVibe.Reviews:** Reviews moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`756f62e`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/756f62e3f2aee7a7e84a24e90b8c3f796b43a49a))\n- **OpenVibe.Search:** Search moves to PostgreSQL (ADR-035, roadmap WS-X2, repository-pass group G2), with a PostgreSQL full-text engine. ([`fa45c65`](https://github.com/OpenVibers/OpenVibe.Search/commit/fa45c6590b3f3404bc1b1c3779db8e8dfa874f4b))\n\n## OpenVibe.Host\n\n[openvibe.host](https://openvibe.host) · [repository](https://github.com/OpenVibers/OpenVibe.Host)\n\n- Compatibility register: a PostgreSQL switches section (ADR-035, WS-X2), one row per service at its switch. The first is C-89 tips: Tips moved to PostgreSQL on 2026-09-28 at 12:46 UTC (release 9987de4, import verified), and its SQLite file… ([`339da31`](https://github.com/OpenVibers/OpenVibe.Host/commit/339da312a5afc29c6494cb4b2d109869b8578274))\n- Compatibility register: C-89 wiki. Wiki moved to PostgreSQL on 2026-09-28 at 13:29 UTC (release ec90476, import verified). Its SQLite file stays read-only as the rollback until 2026-10-05. ([`9a3aadc`](https://github.com/OpenVibers/OpenVibe.Host/commit/9a3aadc4412495e63a5b911f8bcb71a0d962409c))\n- Compatibility register: C-89 blog. Blog moved to PostgreSQL on 2026-09-28 at 13:52 UTC (release 8c8259f, import verified). Its SQLite file stays read-only as the rollback until 2026-10-05. ([`dcbef2c`](https://github.com/OpenVibers/OpenVibe.Host/commit/dcbef2c4caba4b5517aa0a59e08b1003b290e197))\n- Compatibility register: C-89 news. News moved to PostgreSQL at 14:22 UTC (release cf653dd, import verified); its SQLite file stays read-only as the 7-day rollback, archived and deleted on 2026-10-05. ([`fbb00bd`](https://github.com/OpenVibers/OpenVibe.Host/commit/fbb00bd2c578ae4f355ec4a17d2bea2e005887d5))\n- Compatibility register: C-89 deals and coupons. Deals moved to PostgreSQL at 14:33 UTC (release 69d3e47) and Coupons at 14:42 UTC (release 040dc3e), imports verified; their SQLite files stay read-only as the 7-day rollback, archived and… ([`34765b3`](https://github.com/OpenVibers/OpenVibe.Host/commit/34765b39ba25c76c3ab27c5b18e6ae5ad5ca6e61))\n- roles/data/switch-service.sh: the production switch of one service from its SQLite file to PostgreSQL (ADR-035), as run for News, Deals, Coupons and Trade on 2026-09-28. It installs main as ubuntu in /var/tmp, stops the unit, keeps a… ([`b87f20f`](https://github.com/OpenVibers/OpenVibe.Host/commit/b87f20f15afca516a8db83bda06e1ac5fd207ace))\n- Compatibility register: C-89 trade and reviews. Trade moved to PostgreSQL at 15:03 UTC (release e140fcb) and Reviews at 15:05 UTC (release 756f62e), imports verified, with roles/data/switch-service.sh; group G1 is complete. Their SQLite… ([`7311963`](https://github.com/OpenVibers/OpenVibe.Host/commit/73119630810744f63fcc0a47dc24ed62c0898494))\n- Compatibility register: C-89 search and sources. Search moved to PostgreSQL at 15:41 UTC (release fa45c65, its full-text index rebuilt from the imported documents) and Sources at 16:00 UTC (release cee509c), imports verified; their SQLite… ([`9f5fd31`](https://github.com/OpenVibers/OpenVibe.Host/commit/9f5fd31bce0da840bf838d3f857b297ab2730e3b))\n- Compatibility register: C-89 codes and vip. Codes moved to PostgreSQL at 16:09 UTC (release 6329b53) and VIP at 16:47 UTC (release 9ff4277), imports verified; their SQLite files stay read-only as the 7-day rollback, archived and deleted on… ([`91064f1`](https://github.com/OpenVibers/OpenVibe.Host/commit/91064f1f01b00cce209080c4fa4aaa8aea094ec8))\n- Host Stage B moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G2), async from end to end. ([`03d70e1`](https://github.com/OpenVibers/OpenVibe.Host/commit/03d70e10c5c8cebfe0737851b0ee0846a1e1c059))\n- Stage B readiness names the store: the db check makes a real round trip (db.ready) and reports postgresql or pglite with the pool, as the other services on PostgreSQL do. ([`f5fdf5d`](https://github.com/OpenVibers/OpenVibe.Host/commit/f5fdf5d9e1ca84a542c6463248fbd729d02ddad7))\n- Compatibility register: C-89 ai and host. AI moved to PostgreSQL at 17:05 UTC (release af9166a; the first attempt stopped before importing and restarted the old release, as the switch script intends) and Host Stage B at 17:08 UTC (release… ([`2c73902`](https://github.com/OpenVibers/OpenVibe.Host/commit/2c73902b02c3d7239f8b9374fc404e3a6a5f79ce))\n\n## OpenVibe.AI\n\n[ai.openvibe.network](https://ai.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.AI)\n\n- AI moves to PostgreSQL (ADR-035, roadmap WS-X2, repository-pass group G2), async from end to end. ([`1a52447`](https://github.com/OpenVibers/OpenVibe.AI/commit/1a524474860a023549aa788e552c8dae69d77154))\n- Sums of bigint columns (tokens, requests, cache hits) are cast to bigint: on PostgreSQL they are numeric, which openvibe-sdk/db returns as exact text, and the usage summary, status and run totals would have carried strings. cost_usd is… ([`af9166a`](https://github.com/OpenVibers/OpenVibe.AI/commit/af9166a1d3481c212921102df4ea16729736aeb5))\n- Readiness names the store: the db check makes a real round trip (db.ready) and reports postgresql or pglite with the pool, as the other services on PostgreSQL do. npm test 23/23. ([`9f24032`](https://github.com/OpenVibers/OpenVibe.AI/commit/9f24032bddf0d934a023db32eb234abec6aa2380))\n\n## OpenVibe.Blog\n\n[openvibe.blog](https://openvibe.blog) · [repository](https://github.com/OpenVibers/OpenVibe.Blog)\n\n- WIP postgres: db, outbox, config, migration ([`6df97e6`](https://github.com/OpenVibers/OpenVibe.Blog/commit/6df97e6658c432409711a05d4337555eeee61c50))\n- Blog moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`8c8259f`](https://github.com/OpenVibers/OpenVibe.Blog/commit/8c8259f53c5451db55fb62d929b81b10c017c8f2))\n- openvibe-shared v1.27.0 (from v1.25.0): an async route handler's rejection now reaches the error handler instead of ending the process. Express 4 leaves such a promise unhandled and Node 22 exits on it; instrument() now applies… ([`f145325`](https://github.com/OpenVibers/OpenVibe.Blog/commit/f14532552894a2e6aed043f6fdcd3eb42f3e2830))\n\n## OpenVibe.Codes\n\n[openvibe.codes](https://openvibe.codes) · [repository](https://github.com/OpenVibers/OpenVibe.Codes)\n\n- Codes moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G2), async from end to end. ([`6329b53`](https://github.com/OpenVibers/OpenVibe.Codes/commit/6329b532213fe3a8f3c39cb9fa9f6cddf8f0cf42))\n- Readiness names the store: the db check makes a real round trip (db.ready) and reports postgresql or pglite with the pool, as the other services on PostgreSQL do. npm test 28/28. ([`c044d02`](https://github.com/OpenVibers/OpenVibe.Codes/commit/c044d0215e49b428776a9efe71a4fcbf639679d1))\n\n## OpenVibe.Coupons\n\n[openvibe.coupons](https://openvibe.coupons) · [repository](https://github.com/OpenVibers/OpenVibe.Coupons)\n\n- Coupons moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`040dc3e`](https://github.com/OpenVibers/OpenVibe.Coupons/commit/040dc3e3b7cffb01feb8b05885fcb1f0e2c4a95f))\n- openvibe-shared v1.27.0 (from v1.25.0): an async route handler's rejection now reaches the error handler instead of ending the process. Express 4 leaves such a promise unhandled and Node 22 exits on it; instrument() now applies… ([`5ae03b0`](https://github.com/OpenVibers/OpenVibe.Coupons/commit/5ae03b08eff20fd25fcbf460f087a3109fa5cc1a))\n\n## OpenVibe.Deals\n\n[openvibe.deals](https://openvibe.deals) · [repository](https://github.com/OpenVibers/OpenVibe.Deals)\n\n- Deals moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`69d3e47`](https://github.com/OpenVibers/OpenVibe.Deals/commit/69d3e473237be050816f8a7f50a495e50b516cff))\n- openvibe-shared v1.27.0 (from v1.25.0): an async route handler's rejection now reaches the error handler instead of ending the process. Express 4 leaves such a promise unhandled and Node 22 exits on it; instrument() now applies… ([`450af16`](https://github.com/OpenVibers/OpenVibe.Deals/commit/450af16aa5be3ad47520e99b6f29ac6cb3fb9c65))\n\n## OpenVibe.Events\n\n[events.openvibe.network](https://events.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Events)\n\n- Events on PostgreSQL (ADR-035, roadmap WS-X2, repository pass G3). ([`f71906e`](https://github.com/OpenVibers/OpenVibe.Events/commit/f71906e70bdd3f68ed2dd6d691417dd909f2bf5c))\n- Events: iovalkey is a dependency, test:pg boots with Valkey, drain() waits for mid-pass completions. ([`7bccceb`](https://github.com/OpenVibers/OpenVibe.Events/commit/7bcccebee0cb7e293fb8495978d6210de5188769))\n\n## OpenVibe.News\n\n[openvibe.news](https://openvibe.news) · [repository](https://github.com/OpenVibers/OpenVibe.News)\n\n- News moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`cf653dd`](https://github.com/OpenVibers/OpenVibe.News/commit/cf653ddb033e65e788b15ab73c7af3a31914e336))\n- openvibe-shared v1.27.0 (from v1.25.0): an async route handler's rejection now reaches the error handler instead of ending the process. Express 4 leaves such a promise unhandled and Node 22 exits on it; instrument() now applies… ([`79a851f`](https://github.com/OpenVibers/OpenVibe.News/commit/79a851f4c487c8c4dfc6fe5aa962fc9c88787bc0))\n\n## OpenVibe.Reviews\n\n[openvibe.reviews](https://openvibe.reviews) · [repository](https://github.com/OpenVibers/OpenVibe.Reviews)\n\n- Reviews moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`756f62e`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/756f62e3f2aee7a7e84a24e90b8c3f796b43a49a))\n- openvibe-shared v1.27.0 (from v1.25.0): an async route handler's rejection now reaches the error handler instead of ending the process. Express 4 leaves such a promise unhandled and Node 22 exits on it; instrument() now applies… ([`298403f`](https://github.com/OpenVibers/OpenVibe.Reviews/commit/298403fb2539fee8fdcaf58633c79cbac159e119))\n\n## OpenVibe.Search\n\n[search.openvibe.network](https://search.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Search)\n\n- Search moves to PostgreSQL (ADR-035, roadmap WS-X2, repository-pass group G2), with a PostgreSQL full-text engine. ([`fa45c65`](https://github.com/OpenVibers/OpenVibe.Search/commit/fa45c6590b3f3404bc1b1c3779db8e8dfa874f4b))\n- Document counts: the tombstone sum is cast to bigint. On PostgreSQL SUM of a bigint column is numeric, which openvibe-sdk/db returns as exact text, so /api/ready's details reported the count as a string. npm test 12/12. ([`e2474e2`](https://github.com/OpenVibers/OpenVibe.Search/commit/e2474e2cd8ac17c1b3e5f7a7d39932a4a96e4374))\n\n## OpenVibe.Sources\n\n[sources.openvibe.network](https://sources.openvibe.network) · [repository](https://github.com/OpenVibers/OpenVibe.Sources)\n\n- Sources moves to PostgreSQL (ADR-035, roadmap WS-X2, repository-pass group G2), async from end to end. ([`6f68dd5`](https://github.com/OpenVibers/OpenVibe.Sources/commit/6f68dd58f539b533f9d51bf60d06be8fcfde0344))\n- openvibe-sdk v0.20.1: queries inside a transaction run one at a time on its connection (no queued query on a busy node-postgres client). npm run test:pg 11/11. ([`cee509c`](https://github.com/OpenVibers/OpenVibe.Sources/commit/cee509c2a6968858176521f21068b29659ca6813))\n\n## OpenVibe.Trade\n\n[openvibe.trade](https://openvibe.trade) · [repository](https://github.com/OpenVibers/OpenVibe.Trade)\n\n- Trade moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`e140fcb`](https://github.com/OpenVibers/OpenVibe.Trade/commit/e140fcbf3203975999879d8ec3536b78f2915e85))\n- openvibe-shared v1.27.0 (from v1.25.0): an async route handler's rejection now reaches the error handler instead of ending the process. Express 4 leaves such a promise unhandled and Node 22 exits on it; instrument() now applies… ([`f80bd45`](https://github.com/OpenVibers/OpenVibe.Trade/commit/f80bd45f02281144122fb4db3a5e254ba2f8a8e2))\n\n## OpenVibe.VIP\n\n[openvibe.vip](https://openvibe.vip) · [repository](https://github.com/OpenVibers/OpenVibe.VIP)\n\n- VIP moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G2), async from end to end. ([`4f4ab36`](https://github.com/OpenVibers/OpenVibe.VIP/commit/4f4ab3608f058ca3fc52eb6ba64bfb223b0993d3))\n- scripts/import-live.js opens the database with openDb(config) (PostgreSQL, ADR-035), not the old SQLite path. npm test import 1/1. ([`9ff4277`](https://github.com/OpenVibers/OpenVibe.VIP/commit/9ff42777d5865718b8ae9d6ad05bdeadbf1d6c86))\n\n## OpenVibe.Wiki\n\n[openvibe.wiki](https://openvibe.wiki) · [repository](https://github.com/OpenVibers/OpenVibe.Wiki)\n\n- Wiki moves to PostgreSQL and Valkey (ADR-035, roadmap WS-X2, repository-pass group G1), async from end to end. ([`ec90476`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/ec90476740eb6026e965d5aceae048d24b6a73d9))\n- openvibe-shared v1.27.0 (from v1.25.0): an async route handler's rejection now reaches the error handler instead of ending the process. Express 4 leaves such a promise unhandled and Node 22 exits on it; instrument() now applies… ([`95fd80c`](https://github.com/OpenVibers/OpenVibe.Wiki/commit/95fd80cfcf9d271ccbee4d9faef58a0cdf50b709))\n\n## OpenVibe.Tips\n\n[openvibe.tips](https://openvibe.tips) · [repository](https://github.com/OpenVibers/OpenVibe.Tips)\n\n- openvibe-shared v1.27.0 (from v1.25.0): an async route handler's rejection now reaches the error handler instead of ending the process. Express 4 leaves such a promise unhandled and Node 22 exits on it; instrument() now applies… ([`56fd30e`](https://github.com/OpenVibers/OpenVibe.Tips/commit/56fd30ef337d9580ba87f3e402d0952b4fcd9a31))\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-09-28T19:20:01.516Z","revised_at":"2026-09-28T19:20:01.505Z","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","host","ai","blog","codes","coupons","deals","events","news","reviews","search"],"categories":[],"series":{"title":"Patch notes","url":"https://openvibe.blog/@openvibe/series/patch-notes","position":null},"media":[],"citations":[],"indexability":{"indexable":true,"robots":"index, follow","reasons":[]}}