v0.46.32.0
The community train: 54 contributor PRs absorbed. Wave K triaged all 141
open PRs against the live codebase, verified each fix still real at HEAD, and
absorbed the 54 that complement the v0.46.28.0 megawave — one commit per PR,
contributor authorship preserved via Co-authored-by trailers, fixups applied
where master had drifted. 32 community authors credited. This entry lists what
lands NET-NEW on top of v0.46.29.0–v0.46.31.0: #3617, #4400, #4411, #4414,
#4425, #4453 and issues #3729/#4416/#2036 also shipped independently in
v0.46.29.0 — this wave's implementations of those were reconciled at merge and
are not re-credited here.
Credits
Absorbed with thanks from: @Masashi-Ono0611 (13 incl. #4459 whose
implementation was superseded mid-flight by the megawave's #3885 fix — its
e2e tests ship here), @avs-io (5), @calebhicks (4), @frxiaobei,
@alexey-metaengage, @harjothkhara (2 each), and 26 more contributors — full
per-PR attribution in the release PR body and each commit's trailers.
Added
- Semantic takes retrieval:
gbrain takes embedpopulates take embeddings and
thinkgains a vector retrieval arm alongside keyword takes search (#3776).
Migration v142 resizestakes.embeddingto the configured embedding
dimension; any pre-existing take vectors (including manually embedded ones)
are cleared by design and repopulate on the nextgbrain takes embed.
gbrain smoke-test no longer starts a surprise shell-enabled worker. The
worker check now asks the native supervisor status surface, which understands
brain-scoped PID files and the queue's live database lock. A healthy managed
worker therefore passes without creating a second unmanaged process.
Changed
- INTENTIONAL CONTRACT CHANGE: worker repair is no longer auto-fixed. A
missing worker now produces an explicit
gbrain jobs supervisor start --detachrepair hint instead of silently
launchingjobs workwith shell jobs enabled, and the smoke test exits 1
when nothing manages workers.
Fixed
-
gbrain takes --helpandgbrain auth --helpprint full subcommand usage
without an engine (#3780, #4083);think --takerecords a take end-to-end
instead of silently no-oping (#4469, fixes #2556). -
Bun 1.3.10 warm-transpiler-cache poisoning of
test/doctor.test.ts(59-test
cascade on any warm re-run): syncrequire()sites converted to
await import. (The search cache key is unchanged in this release — this
wave's keyword-fallback fold was already covered by v0.46.29.0's re-key.) -
Page ingest no longer aborts an entire document (or batch run) when the body
or a chunk contains a raw NUL byte or lone UTF-16 surrogate: pages body
columns and chunk_text are sanitized at write time in both engines, the same
policy as links/timeline/takes free-text. (#3998) -
A live supervisor plus a legacy worker PID is reported as a duplicate
topology that requires operator review. -
Smoke-test worker detection is hermetically covered without touching live
processes or global PID files. -
Doctor health-score extraction uses POSIX
sedinstead of GNU-only
grep -P, eliminating the macOS warning and?/100fallback. -
Page-retrieval metrics can no longer exceed their mathematical bounds when
search returns multiple chunks from one page: Precision@k, Recall@k, MRR,
nDCG@k, NamedThingBench, and the qrels correctness gate now share one
unique-page ranking primitive that keeps only the first/best occurrence of
each ranked page before any cutoff. Duplicate non-relevant chunks no longer
consume page-level ranks, and qrels ground-truth duplicates count as one
relevant page. Historical baselines that included duplicate page hits may
decrease and should be reviewed before changing quality thresholds. (#4184)
To take advantage of v0.46.32.0
gbrain upgrade
gbrain apply-migrations --yes # v142 resizes takes.embedding to your configured dimension
gbrain takes embed # repopulate take vectors (v142 clears them by design)
gbrain doctor # verify