[v0.22.0] -- 2026-08-25 (Release)
This release finishes the responsive-snapshot workstream: Bubble Tea now keeps the large UI model
behind a pointer, snapshot installation reuses model-owned buffers, and small content-only changes
rebuild only the affected list items. The fast path is guarded by deterministic fingerprints and
falls back to a full rebuild whenever graph topology, recipe membership, sort order, or more than
20% of issues changes.
Delivered capability: Faster UI Updates
- Stop copying the entire model on every message. The TUI model and its hot navigation helpers
now use pointer receivers, eliminating the roughly 198 KB interface-boxing copy that previously
accompanied eachUpdate. On the 1,000-issue snapshot-swap benchmark, the measured handler moved
from 105-225 us before this work to 4.076-4.284 us, a 24.5x-55.2x latency reduction;
bytes per operation fell by about 99.8%. See
96029793and
1a90b016. - Keep interactive latency inside the frame budget. Five update-only keypress runs measured
p99 at 148-160 us. Three isolated update-plus-render runs measured p99 at
33.05-35.54 ms, below the 50 ms interaction target. Isolated GC validation measured maximum
pauses of 0.879-1.374 ms. The benchmarks live with the code in
5aac8532and the broader
regression coverage ind5a1be08. - Precompute immutable view inputs off the UI loop. Snapshots now carry list-model items,
semantic-search documents, alert summaries, graph data, and stable ID/order indexes so delivery
does not reconstruct these structures during rendering. See
b24297fc.
Delivered capability: Correct Incremental List Rebuilds
- Detect changes deterministically. Issue fingerprints distinguish nil from present zero-value
fields, ignore nil dependency entries, canonically order tied comments, and classify simultaneous
content and dependency changes exactly once. See
16ed4342. - Reuse unchanged work only when it is safe. A change at or below the 20% threshold uses the
incremental list path only when recipe identity, membership, order, and dependency topology are
unchanged. Additions, removals, dependency edits, recipe changes, reordered results, and larger
diffs automatically take the full path. Incremental and full results are compared directly in
tests, including recipe and topology fallbacks. - Measured result: on an AMD EPYC-Milan worker, five paired 1,000-item runs reduced one-change
list construction from 374.9-412.4 us to 189.1-212.6 us (1.76x-2.18x faster).
Allocations fell from 1,001 to 2 per operation (99.8% fewer). The remaining approximately
516 KB/op is the immutable output slice itself and is not claimed as eliminated.
Reliability, Integration, and Operator Improvements
- Make background-worker cancellation and recovery ownership thread-safe, with lifecycle and idle-GC
coverage in2a2ec14eand
3e6473bb. - Copy interactive graph node descriptions without mutating Beads, including clipboard fallbacks
for offline dashboards (f2e6c9da). - Generate tracker-neutral v4 agent guidance with current
bdandbrcommand families, backed by
integration coverage (b9ae1472). - Keep fallback and Nix version sources aligned through a release invariant test
(70adf7f8).
Verification Boundary
- Passed
go build ./...,go vet ./..., the complete analysis package, focused incremental race
tests (three repetitions), and all non-environment-sensitive packages through RCH. - The RCH environment runs as root, rewrites the working directory, and lacks usable VCS metadata;
seven permission/cwd/timing tests were therefore excluded from the aggregate remote run after
their failure modes were reproduced and classified. The E2E package passed separately with
GOFLAGS=-buildvcs=falsepropagated into its nested build.
Added
- Copy graph node descriptions without mutating Beads. The exported interactive graph's
right-click menu can now copy either a node ID or its raw description. Both actions share a
clipboard fallback for local/offline dashboards and report empty descriptions or copy failures
instead of silently doing nothing. - Generate correct agent guidance for both Beads trackers.
bv --agents-addnow installs a
tracker-neutral v4 blurb with separate, currentbdandbrcommand families, rather than
telling Go Beads workspaces to mutate their tracker withbr.