From ba7263b91e16d29b830bcd6e547ef29b707d5912 Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Tue, 16 Jun 2026 22:45:33 -0700 Subject: [PATCH] chore: bump version to v0.42.49.0 Co-Authored-By: Claude Opus 4.8 (1M context) --- CHANGELOG.md | 4 ++-- TODOS.md | 2 +- VERSION | 2 +- package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d37e931f7..9d6be4593 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to GBrain will be documented in this file. -## [0.42.48.0] - 2026-06-16 +## [0.42.49.0] - 2026-06-16 **Big embed backfills and syncs now throttle themselves when the database gets busy, so clearing a backlog can't starve the job queue — no more external babysitter scripts.** A naive `gbrain embed --stale` or large `gbrain sync` against a PgBouncer transaction-mode pooler could saturate it and starve the minion supervisor's lock renewals, cascading `lock-renewal-failed` into dead jobs. The field workaround was an external wrapper that SIGSTOP/SIGCONT'd the process off a side-pool latency probe. That approach was blind (the side pool read low latency while the pool that mattered starved), unsafe (SIGSTOP can freeze a process mid-transaction holding locks), and couldn't touch peak pressure. gbrain now does this natively, and better. @@ -17,7 +17,7 @@ Pacing is **opt-in** (default `off`) and built on one composable primitive: it c ### Changed - **`gbrain embed --stale` now single-flights per source** using the same lock the `embed-backfill` job holds, so a hand-run backfill and a queued job can't grind the same source concurrently. Paced runs add a bounded end-of-run rescan (catches rows that landed behind the cursor during a longer run), and the embed time budget excludes paced-sleep time so a contended DB still converges instead of exiting early. -### To take advantage of v0.42.48.0 +### To take advantage of v0.42.49.0 `gbrain upgrade`. Pacing is off by default — nothing changes until you opt in. To clear a big embed backlog safely on a busy pooler: `gbrain embed --stale --pace` (or `--pace=gentle` to be extra conservative). To pace the background embed-backfill job and every embed path automatically: `gbrain config set pace.mode balanced`. During an incident you can override without a redeploy: `GBRAIN_PACE_MODE=gentle` or `GBRAIN_PACE_MAX_CONCURRENCY=4`. ## [0.42.46.0] - 2026-06-16 diff --git a/TODOS.md b/TODOS.md index fa3aacc60..807367349 100644 --- a/TODOS.md +++ b/TODOS.md @@ -1,6 +1,6 @@ # TODOS -## Pace Mode follow-ups (filed v0.42.48.0) +## Pace Mode follow-ups (filed v0.42.49.0) Deferred from the paced-backfill wave (CEO + eng review CLEARED). Core shipped: `db-pacer` + `pace-mode` wired into embed (CLI + shared core + `embed-backfill` diff --git a/VERSION b/VERSION index bf8e9f9c4..bf317619b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.42.48.0 \ No newline at end of file +0.42.49.0 \ No newline at end of file diff --git a/package.json b/package.json index b7d577b94..4c08fb119 100644 --- a/package.json +++ b/package.json @@ -143,5 +143,5 @@ "bun": ">=1.3.10" }, "license": "MIT", - "version": "0.42.48.0" + "version": "0.42.49.0" }