NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #1111 by repository stars
Last release 7 days ago
01 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 41 of 42 stable releases
Nothing withdrawn
no release was ever pulled
10 months old
92 releases · first in 2025
One column per month.
Nothing published for this version
Beads Viewer v0.25.2 keeps every view and the footer inside the terminal, and fixes two installer problems.
Beads Viewer v0.25.2 keeps every view and the footer inside the terminal, and fixes two installer problems.
? help to the last) instead of being cut mid-word.install.sh works with only jq. Picking the release archive only worked with Python, so a machine with just jq fell back to building from source. Both tools now work and are tested to give the same answer.install.sh needs Go on macOS and offers the official .pkg, it never got a download URL, so that path did nothing. It now builds the URL from go.dev's file list and refuses to run the package unless its SHA-256 matches the one go.dev publishes.Archives cover Linux amd64/arm64, macOS amd64/arm64 and Windows amd64. Verify downloads against checksums.txt. Release assets include individual checksum files, the sealed release-gate receipt and an SBOM generated from the packaged Linux amd64 binary.
See CHANGELOG.md for details.
? help to the last) instead of
being cut mid-word
(fix).install.sh works with only jq. The installer said "install python3 or
jq", but picking the release archive only worked with Python, so a machine
with just jq fell back to building from source. Both tools now work and
are tested to give the same answer
(fix).install.sh
needs Go on macOS and offers the official .pkg, it never actually got a
download URL, so that path silently did nothing. It now builds the URL from
go.dev's file list and refuses to run the package unless its SHA-256 matches
the one go.dev publishes
(fix,
URL and checksum).Nothing published for this version
Beads Viewer v0.25.1 fixes the shortcuts sidebar layout (GH #209 ), restores dashboard time travel on repositories with merged branches or a renamed t
Beads Viewer v0.25.1 fixes the shortcuts sidebar layout (GH #209), restores dashboard time travel on repositories with merged branches or a renamed tracker, and makes tracker-source selection, history and search more reliable. It also ships the September graph and timeline work listed under v0.25.1 in the changelog.
;), board, graph, insights, actionable, history, tree, label dashboard, attention, flow matrix and sprint views are now laid out beside it instead of being drawn full-width and wrapped into it. Help and pickers are drawn without the sidebar, and on a terminal too narrow for it the sidebar is hidden and the status line says why.--export-pages could skip history.json ("timeline commit … missing from source history") after a branch that edited the tracker was merged, or after the tracker was renamed. The timeline now orders commits by their full Git ancestry.BEADS_DB, BEADS_DIR or --db directory is no longer outranked by an export in an unrelated worktree; a SQLite tracker with recent writes in its WAL counts as fresh; issues.jsonl wins ties with legacy names; cached validation is dropped when the source changes.AGENTS.md is bounded to 16 MiB, rejects a file that changes while being read, and no longer follows a symlink to an unrelated file.Archives cover Linux amd64/arm64, macOS amd64/arm64 and Windows amd64. Verify downloads against checksums.txt. Release assets include individual checksum files, the sealed release-gate receipt and an SBOM generated from the packaged Linux amd64 binary.
See CHANGELOG.md for the full list.
;), only the list view made room for it. Board, graph,
insights, actionable, history, tree, label dashboard, attention, flow matrix
and the sprint dashboard were drawn at full width with the sidebar added on,
so rows wrapped into each other and the footer was pushed off screen. Every
view is now laid out in the space left beside the sidebar, overlays such as
help and the pickers no longer get the sidebar next to them, and on a
terminal too narrow for it the sidebar is hidden and the status line says why
(fix,
row tests,
live-reload speed).--export-pages could
skip history.json with the warning "timeline commit … missing from source
history" once a branch that edited the tracker had been merged, so the
exported dashboard had no time travel. The same happened when the tracker
had been renamed (for example beads.jsonl to issues.jsonl) and an older
branch that edited the old name was merged later. The timeline now orders
its commits by their full Git ancestry
(merged branches,
renamed tracker).BEADS_DB, BEADS_DIR or --db names
a tracker directory, a newer export in an unrelated Git worktree can no
longer win. A SQLite tracker whose recent writes are still in its WAL file is
treated as fresh instead of losing to an older JSONL export, and when two
files are equally fresh issues.jsonl is preferred over legacy names. The
cached validation result is dropped whenever the source actually changes
(worktrees,
WAL freshness,
name ties,
cache identity).AGENTS.md refuses
files over 16 MiB, rejects a file that changes size while being read, and no
longer follows a symlink to an unrelated file
(agent files).install.sh and install.ps1
now print the Go version the build actually used (the module's pinned
toolchain), not the version of the go command that launched it
(installer).tests/artifacts/perf/pages_load.json
was re-measured (9.8 MB to 17.5 MB). The export code is unchanged; v0.25.0
produces the same bundle for the same tracker.bv-643f and bv-z38b are complete.BV_NO_BG_QUERY disables the query. Parser and cross-build checks pass, but
actual Windows Terminal console I/O remains unverified
(background query).--robot-docs no longer tells agents that TOON "saves ~30-50% tokens" and no
longer offers bv robot-triage --toon as the token-saving example. The
measured artifact records TOON at 0.93x JSON for --robot-graph and 1.09x to
1.15x for the nested payloads, and the guidance now says so and points at
--stats. When no tru encoder is discoverable, --format toon also stops
declaring output_format: "toon" over JSON bytes; the envelope now reports
json, matching the fallback warning already printed on stderr. The
--robot-schema entry for Cores and Slack is corrected from object to
array, which is what --robot-insights emits.SKILL.md audit against the current code corrected the
fuzzy-filter field set, the HTML export's search fields and its 2-character /
8-result limits, the board age band at exactly 30 days, the untyped dependency
as a blocking type, the informational status of related and
discovered-from, the correlation feedback stats fields and the unwritable
ignore decision, the Cass session modal mock and its relative timestamps,
the eight-hour workday used by --robot-capacity and --robot-forecast
summary days, the hybrid-only candidate widening, the impossible "ms": 0 on a
skipped metric, the --robot-diff cycle field names, the --robot-recipes
example descriptions, and SKILL.md's claim that .status is top-level on
--robot-triage. The in-app tutorial no longer advertises fuzzy search as
typo-tolerant or the hashed-keyword embedder as meaning-based.These changes advance bv-apal.1; its full performance qualification remains
open. All 36 current-only UI cohorts passed the unchanged 50 ms limits on
hz4, with 36,000 samples and a worst p99 of 34.47 ms. This does not replace
the original paired UI and CLI matrix.
nixpkgs configuration does
not configure bv's own import. Consumers of its exported package must keep
the documented explicit unfree allowance
(corrected instructions).bv-oonu.9.Beads Viewer v0.25.0 improves workflow readiness, source selection, live dashboards and Cass search, and refreshes the Go and Rust/WASM dependencies.
Beads Viewer v0.25.0 improves workflow readiness, source selection, live dashboards and Cass search, and refreshes the Go and Rust/WASM dependencies.
Archives cover Linux amd64/arm64, macOS amd64/arm64 and Windows amd64. Verify downloads against checksums.txt. Release assets include individual checksum files, the sealed release-gate receipt and an SBOM generated from the packaged Linux amd64 binary.
See CHANGELOG.md for the detailed changes and evidence boundaries. Native Windows can still reject replacement of a SQLite database held open by another process; that failure preserves the existing database.
Published from 87cee258 after all ten release-gate stages passed through
RCH with no skips. Five platform archives, checksums, the sealed gate receipt
and a packaged-binary SBOM were uploaded with DSR; all 14 assets were downloaded
and verified before publication. Homebrew and Scoop manifests were updated.
Native Linux amd64, macOS arm64 and Windows amd64 installer/update checks passed,
as did the packaged binary's desktop/mobile/offline browser journeys. Native
source-build acceptance and the incomplete P1 performance matrix remain open.
--robot-priority, now reuse one
completed analysis snapshot across the batch instead of rereading the analysis
cache for every issue. Scoring, explanation fields, ordering, and output caps
are preserved (snapshot reuse;
full-output regression).issues.jsonl, then beads.jsonl, then
beads.base.jsonl before comparing the selected export with SQLite and
worktree sources. A newer sync snapshot cannot replace current issue state,
and an empty export stays empty. Sidecar-only directories no longer bypass
the filename allowlist through the fallback loader; explicit file overrides
remain available. Human commands now report ignored left/right merge
artifacts while robot stderr stays clean (bv-mvvu, bv-uoyj.1).bv-oonu.21;
WAL refresh).--as-of exports reject
--watch-export before writing files (bv-oonu.20;
source repair).conditional-blocks and waits-for affect blocking
analysis; custom statuses do not automatically become claimable
(loader change).filters.status entry with a message
that says so, instead of calling it an unknown status. Since the loader change
above the check has accepted custom workflow states such as done; only the
error text and the Validate documentation still described a closed
vocabulary.h now navigates to a prerequisite and l to a dependent,
with stable ordering. The export and real Chromium regressions are tracked by
bv-oonu.12
(dashboard repair).bv-oonu.13
(simulation repair).bv-oonu.14).bv-oonu.15;
rankings and readiness repair).max_items
selection. Watched exports reapply repository, label and recipe filters to
each reload instead of expanding to the full dataset. Hidden prerequisites
still govern readiness, newly matching issues enter the selection, and an
empty selection clears old rows (bv-oonu.16;
export scope repair).bv-oonu.17;
ranking limit repair).bv-oonu.18;
graph recipe repair).bv-oonu.19;
candidate selection repair).bv-xbvo.11;
scoped ranking repair).--capacity-label. Missing prerequisites, inherited parent gates and
parked/deferred work no longer produce false actionable counts. Direct
bottlenecks exclude non-blocking relationships, resolved endpoints and
duplicate pairs; result ordering is stable. The duration calculation remains
a heuristic (bv-xbvo.12;
capacity repair).bv-xbvo.14;
capacity performance repair).bv-xbvo.13;
forecast scope repair).go.mod. Both source installers enforce the same minimum. The Nix flake
moves to the 26.05 package set, which supplies Go 1.26.7.chroma, glamour, reflow,
go-json; see docs/PROVENANCE.md) now live under third_party/ as
complete Go modules reached through replace directives in go.mod, so
go mod vendor copies the patched sources instead of silently reverting
them. Previously the patches existed only as hand edits inside vendor/,
and a routine go mod vendor reverted all four, including the go-json
decoder-cache race repair that no -race test exercises. A new e2e
check fails when vendor/ and third_party/ disagree, and
docs/RELEASING.md documents editing, upgrading and retiring a patch.
The vendored package sources remain byte-identical to the previously
committed patched files.V or Esc cancels a pending lookup;
results from an older selection or dataset cannot open a stale modal.
Refreshed data receives a fresh correlation cache. V also works from the
detail pane, and closing the modal restores its originating view (bv-xiyd;
responsiveness repair).hits response and requests the
title, preview, workspace and millisecond timestamp fields used by the UI.
Pressing V can show sessions from a searchable stale or rebuilding index
while retaining its health warning. Cached sessions keep their computed
scores and match reasons; failed or partial lookups remain retryable instead
of becoming cached empty results (bv-8phk;
search adapter,
cache repair and live verification).network, show
priority reasoning as an array and use the actual alert fields. Flow Matrix
rows are documented as blockers and columns as dependents; saved-baseline
drift checks are distinguished from Git-revision comparisons. Cass scoring
and modal controls now describe the implemented behavior
(documentation corrections).br update <id> --claim --json,
matching the README and assigning the current actor as work starts.
Instruction version 6 makes existing version 5 blocks eligible for refresh
through --agents-add; surrounding user instructions remain intact.bv-apal.12/bv-apal.13
(implementation and regression tests).BV_INSIGHTS_MAP_LIMIT
documentation now gives its existing default of 200; zero and invalid values
use that default. A real CLI regression checks all five documented limit cases.
These corrections are part of the still-open bv-apal.3/bv-apal.4 workstream;
they do not establish the remaining performance or native-platform claims.bv-oonu.9;
diagnostic repair).
Both README install commands now pin this reviewed script. Portable process
regressions and native PowerShell 5.1 version/mismatch checks pass; the original
native source first-start failure remains open.Install-FromRelease, avoiding
the redirected-download stalls observed with Windows PowerShell 5.1 without
changing the caller's preference. The native harness now checks the existing
diagnostic_top_pick and metadata-free claim refusal instead of an obsolete
top-level ID (3ca2176f).
This fixes installer behavior and its test; it does not change robot output.87756815).
The pinned source option uses a verified tagged checkout and vendored
dependencies; the stale reference to its older go install path is corrected.
The installer fix follows v0.24.1's immutable tag and is already usable with
its published binaries.3ca2176f, the complete default native Windows suite
passed against the public v0.24.0 and v0.24.1 archives: installation, readiness,
update/no-update, and preservation of the installed executable and user PATH
on failure. Readback covers 28 command logs, eight capability results, and
five specific rejection cases; it does not count a transport timeout as a
successful rejection.This patch reduces avoidable work and waiting in robot commands.
This patch reduces avoidable work and waiting in robot commands.
All five supported archives are built from the tagged, clean source with Go 1.25.5 and CGO disabled. Verify downloads with checksums.txt. The attached release-gate receipt binds the source, toolchain, ten-stage verification, and archive hashes.
Live archive installation, update/no-update, readiness and failed-install preservation checks passed on Linux amd64 and Windows x64. The Windows installer follow-up in 3ca2176f suppresses download progress and follows this immutable release tag; the README pins it. Native macOS and Linux ARM execution, and a supported Nix build, remain unverified. An initial native Windows source installation passed; a later optional source rerun exceeded the unchanged 10-second first-start guard. That failure is retained even though a second invocation succeeded. No new cross-platform latency claim is made.
The attached SPDX SBOM describes the packaged Linux amd64 binary. No minisign signature is attached because the signing key was unavailable.
The retained performance campaign's exact-output comparison reported a failure because its older baseline identifies itself as v0.23.0 and its candidate as v0.24.0. Review of all 144 fixed-clock outputs found only the 72 expected version-field differences. The original failed result is retained, and broader performance acceptance remains open.
Homebrew and Scoop are updated from these same archive checksums. Go module users and Nix users can select tag v0.24.1.
Full change list: v0.24.0...v0.24.1
This patch removes avoidable hashing and cache-lock waiting from robot commands while preserving their data-hash scope and computed analysis results.
f719c41a).
Linux and native Windows regression tests exercise the real lock, preservation
of the existing entry, and a successful later publication.--repo filtering still
trigger recomputation. The envelope hash remains scoped after --repo and
before --label or --recipe; 15 scenarios exercise both robot plan and
triage (6c8a4474).3e4e61c9,
Go 1.25.5, and disabled CGO. The 14 assets include checksums, a
sealed gate receipt,
and an SPDX SBOM for the Linux amd64 binary. No minisign signature was produced.Nothing published for this version
Latency campaign across analysis, loader and TUI, graph-navigation and historical-causality repairs, release-gate isolation, and the golang.org/x/text
Latency campaign across analysis, loader and TUI, graph-navigation and historical-causality repairs, release-gate isolation, and the golang.org/x/text GO-2026-5970 dependency fix. Full details in CHANGELOG.md.
defer_until flags harmonised; robot envelope embedded in the interactive HTML graph export; readiness scopes with projection/authority boundaries and richer triage recommendations; release gate writes logs and receipts outside the checkout with installer, gate, WASM and dashboard smoke tests under tests/scripts.golang.org/x/text v0.38.0 -> v0.41.0 (GO-2026-5970, reachable through norm.Form.Properties), golang.org/x/image v0.42.0 -> v0.45.0, golang.org/x/net v0.58.0; vendor/ regenerated with the hand-patched renderer files preserved.bv_0.24.0_<os>_<arch>.tar.gz (.zip on Windows) for linux/darwin amd64+arm64 and windows amd64, each containing bv, LICENSE, README.md and CHANGELOG.md, with a .sha256 sidecar. checksums.txt / SHA256SUMS cover all archives (install.sh, install.ps1 and bv --update verify against checksums.txt); SHA256SUMS.minisig is the minisign signature.
bv-apal.1)fbc41526); ComputeDataHash / ComputeIssueDiff reuse one fingerprint writer per call, 1,289 -> 777 allocations per 256-issue aggregate (c48bd53c); the ready set is reused across parallel-gain candidates and marginal unlock IDs are selected without copying issues (9a72543d, 187f7525); blocker IDs sort without reflection (347134f1); the regenerable analysis cache no longer forces durable flushes (4b018e1b); the drift Calculator gains ReuseAnalyzer to share precomputed readiness and topology across runs (1713989c); Phase 2 analysis is size-tiered with a deterministic betweenness approximation that reduces in sample order (341a0005).735f246a, 30417526); full list rows are initialised in place and incremental row copies are avoided (934da756, e3dcc7ce); owned readiness data is compacted (84cf799b); background Phase 2 preparation no longer mutates the active model (1c5d55f9); snapshot diffing and markdown element layout allocate less (f2bad78d).7f708334); streaming readers and concurrency pooling in internal/datasource and pkg/loader (3b4df94d); metrics vector-search caching layers (19323918).strings.Builder replaces quadratic concatenation in chroma coalesce.go and glamour ansi/elements.go, and reflow padding.go uses runewidth.RuneWidth (5e16bff3). These are hand patches under vendor/; a bare go mod vendor reverts them.93b90959).40644bd9); XFetch cache refresh keyed on the actual expiry (8285b6f6).a4f8245b).5814bed8).8cd63299); the frozen 1,000-issue benchmark input is tracked so a clean checkout can run the release gate (09fed4e9).defer_until flags and CLI fixtures harmonised (54db481b); the interactive HTML graph export embeds the robot envelope (19323918); readiness scopes modelled with projection and authority boundaries, richer triage recommendations, cycle detection and ETA prediction (341a0005); graph-analysis invariants, vector indexing and SQLite export schema validation hardened (3db9dd04); ingestion pipelines, defer_until parsing and workspace path resolution hardened (3b4df94d)./tmp/bv-dist with CGO_ENABLED=0 and GOWORK=off (a90029b8, 0aca294f); install.sh / install.ps1 handle native packaging with checksum verification and isolated release verification; scripts/release_gate.sh writes logs and receipts outside the checkout; the bv-graph-wasm Rust toolchain is pinned; installer, gate, WASM and dashboard smoke tests live under tests/scripts (0aca294f); smoke and installer artifacts are retained as evidence (8a6386e9).087a847f, 1a400830, 257427df, f9d950a0).golang.org/x/text v0.38.0 -> v0.41.0 (fixes GO-2026-5970, reachable through norm.Form.Properties), golang.org/x/image v0.42.0 -> v0.45.0, golang.org/x/net -> v0.58.0; vendor/ regenerated with the three hand-patched files above preserved (1e8acace, #200).flake.nix, pkg/version fallback, README install examples, installer test defaults).Nothing published for this version
Reality check 2026-09 (bridge plan docs/planning/REALITY_CHECK_BRIDGE_PLAN_2026-09-01.md )
docs/planning/REALITY_CHECK_BRIDGE_PLAN_2026-09-01.md)sync_base.jsonl shadowing), probe warnings are buffered and only surface for the source actually used, and every robot payload names its source_path / source_kind plus as_of / scope in one shared envelope.--label / --recipe / --repo / --as-of now honour them; --robot-file-hotspots moved into the registry and roughly 1,400 lines of unreachable inline handler copies were deleted from cmd/bv/main.go, along with the never-imported pkg/beadscli package; --robot-help is generated from the registries.--feedback-* weights change --robot-triage scoring (after three samples), and correlation confirm/reject changes --robot-history, the commit index, --robot-explain-correlation, and the History view.--robot-orphans reports the scanned window and beads-only commit count.--robot-burndown (at_risk), a scope-aware ideal line, P opens the dashboard; every declared alert type has an emitter (velocity_drop, high_impact_unblock, abandoned_claim, potential_duplicate) plus new priority_mismatch and scope_creep, each with a suggested_action, labels for --alert-label, a proactive_max_issues cap with skipped_checks, and every threshold documented from .bv/drift.yaml.Shift+Tab / n N / t bindings, startup update check opt-out (BV_NO_UPDATE_CHECK)..bv/workspace.yaml is auto-discovered when no .beads is reachable; recipes load from .beads/recipes/*.yaml and --recipe accepts a file path.scripts/release_gate.sh (gofmt, build+vet, -race unit and e2e, docs parity, action pins, vendor hashes, benchmark compare, robot smoke, and the gate's own script self-tests) with scripts/check_action_pins.sh, scripts/robot_smoke.sh, scripts/verify_vendor.sh, a vendored-asset MANIFEST.json and docs/PROVENANCE.md; ci.yml runs the gate; scripts/verify_isomorphic.sh builds the baseline in a detached worktree instead of stashing the caller's tree..goreleaser.yaml now names archives bv_<version>_<os>_<arch>.<ext>; bv --update prefers the versioned name and still accepts the unversioned form older releases used; install.sh selects by platform so it handles both; README's direct-download section points at the release page and checksums.txt instead of moving latest links.script-src no longer allows 'unsafe-inline': the four inline bootstrap scripts moved into head_init.js and the top of viewer.js, 'wasm-unsafe-eval' is declared for sql.js and the graph WASM, and bv --preview-pages serves its live-reload script as /__preview__/livereload.js instead of injecting an inline block. 'unsafe-eval' remains because the vendored Alpine build evaluates x-* expressions with Function(); switching to Alpine's CSP build is the remaining step. Guards: TestEmbeddedIndex_CSPHasNoInlineScripts (also checks every referenced asset is embedded) and the e2e export check. Verified in a headless Chromium with scripts/dashboard_browser_smoke.sh: no refusals, database, WASM graph engine, charts, and triage all boot, and a planted inline script is blocked while the app still runs.pkg/analysis (from wip/fresh-eyes-20260826): 37 files landed after a per-file rebase behind the gate: exact issue-ID matching in dependency suggestions (bv-42 no longer matches inside bv-420), shell-quoted bead IDs in suggested br commands, cycle detection that reports truncation instead of silently capping, readiness-after-completions helpers shared by plan and priority, config caps normalised to defaults, and the cache refusing to serve incomplete Phase 2 results. Two tests on that branch were broken on the branch itself (a DeferUntil pointer aliased into the expected value; a cache-version literal not bumped) and are fixed here; the branch's asynchronous cache publish raced a synchronous second Analyze, which now stores before returning. The remaining packages of the branch are triaged in tracker item H4.scripts/benchmark.sh now runs ten tracked benchmarks against the frozen tests/testdata/benchmark/medium.jsonl (never the live tracker), writes benchmarks/baseline.txt with a provenance header (date, Go, CPU, OS, commit, dataset hash), and compares the best observed ns/op per benchmark with a built-in comparator (benchstat optional); tests/scripts/benchmark_compare_test.sh proves it turns red on a doubled median and a missing benchmark. compare judges HEAD against a fresh run of the baseline commit built in a detached worktree minutes earlier on the same machine, so host drift on a shared VM no longer reads as a regression; the stored baseline is the fallback.KeyRegistry is the help index only; its never-called dispatch surface (Dispatch, RegisterView, Handler, BindingsCount, Clear) is gone. Keys that worked but were undocumented (E, f, !, w, s, S in the list; H, L, s on the board; E in the tree) are now in GetKeyBindingDocs, the sidebar, and the README, with tests driving each through Update.install.ps1 now downloads the release zip and checksums.txt, verifies SHA-256 with Get-FileHash, and refuses a missing or mismatching checksum before anything reaches the install directory; Go is no longer required (-FromSource keeps a build pinned to the resolved tag). tests/scripts/install_ps1_test.sh runs it under pwsh against a local fake release: verified install, tampered checksum refused, missing checksums refused, -Version pin. README pins the piped form to the reviewed commit.pkg/loader and pkg/workspace (from wip/fresh-eyes-20260826, pass 3): .beads/redirect following exposed as ResolveBeadsDir/ResolveBeadsDirWithTrace, the issues file opened only after a same-file check, bd export refreshes run with an absolute BEADS_DIR and without an ambient BEADS_DB, and the workspace aggregate loader reports dropped records per repository, routes parse warnings safely in robot mode, and rejects cross-repository ID collisions; over-limit lines are counted before their warning fires so handlers see consistent stats.pkg/search (from wip/fresh-eyes-20260826, pass 4): a stored vector index whose dimension does not match the embedder is backed up and rebuilt instead of being served as a hit; NewHybridScorerAt pins the recency clock; normalizer and query-adjustment fixes land with their tests. Main's stricter vector-index validation is kept. The branch's internal/datasource slice is retired: the allowlist and silent-probing design already on main replaced it.scripts/build_graph_wasm.sh pins the rebuild without wasm-pack (cargo for wasm32-unknown-unknown, a wasm-bindgen CLI that must match the crate version in Cargo.lock, wasm-opt -Os) and prints built and vendored hashes with tool versions; docs/PROVENANCE.md records that the comparison is still owed and why.--graph-format=dot|mermaid returns the diagram text in the graph field of the JSON envelope. The version marker moved from v4 to v5 so bv --agents-update refreshes installed blocks (--agents-add compares versions, not content); this repository's AGENTS.md and the README copy were regenerated with the tool.cycle_introduced is documented as new_cycle.internal/env): Centralizes all 41 BV_* and BEADS_* environment variables in a single package with typed accessors (BV_NO_COLOR, BV_TEST_MODE, BV_LOG_FORMAT, BV_SEARCH_MODE, etc.) and an AST-walking vet test guaranteeing zero raw os.Getenv / os.LookupEnv calls in production code.internal/docgen): Emits living reference documentation (docs/generated/{flags,env,alerts,recipes,presets,keys,sort_modes}.md and constants.json) and synchronizes tables into README.md via go generate / bv --generate-docs..beads/beads.db was at schema 0 and rejected by br 0.5.7 (SCHEMA_MISMATCH expected 17, found 0); the JSONL was harmonized (empty-string fields dropped, dependency metadata / thread_id added), a fresh DB was rebuilt from it and promoted, and the old DB was renamed aside (beads.db.bad_20260902T030027Z) rather than deleted. With the maintainer's written approval later that day the renamed DB/WAL/SHM and the two rebuild *.fsqlite-migration-state markers were removed; the recovery_20260902T023914Z/ snapshot (git-ignored) is the one leftover, kept for a recursive removal from the maintainer's own shell.cannot connect to database: SQL logic error: invalid uri authority: E:%5C.... The read-onlynet/url, which turns a drive-letter path (or any relative path) intofile://E:%5C..., putting the first path segment in the URI authority slot. The DSN path isfile:///E:/...) on every platform (#198).Nothing published for this version
Nothing published for this version
[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.
Update. On the 1,000-issue snapshot-swap benchmark, the measured handler moved96029793 and1a90b016.5aac8532 and the broaderd5a1be08.b24297fc.16ed4342.2a2ec14e and3e6473bb.f2e6c9da).bd and br command families, backed byb9ae1472).70adf7f8).go build ./..., go vet ./..., the complete analysis package, focused incremental raceGOFLAGS=-buildvcs=false propagated into its nested build.bv --agents-add now installs abd and br command families, rather thanbr.Nothing published for this version
v0.21.2 publishes the profile-driven optimization campaign staged under the tag-only v0.21.1 , plus corrected Nix packaging guidance.
v0.21.2 publishes the profile-driven optimization campaign staged under the tag-only v0.21.1, plus corrected Nix packaging guidance.
Profiling showed Git-history snapshot extraction dominated the cold path. The extractor now recycles a blob buffer only after its final record-line view is evicted, allowing the next blob to reuse bounded storage instead of repeatedly allocating, clearing, and garbage-collecting large byte arrays.
On the pinned 540-issue / 19-open workload, independent replay measured:
Wall time did not reach statistical significance and peak RSS increased 0.177%, so neither is claimed as an improvement.
Robot-insights what-if and cycle-break paths now consume completed GraphStats instead of decoding or recomputing the same analysis repeatedly. A focused 540-item what-if benchmark moved from 4.4108 s and 1.648 GB allocated to 3.203-16.564 ms and 1.444-4.931 MB allocated. This is a scoped batch result, not a whole-command latency claim.
All 50 optimization passes are recorded, including rejected PGO, code-generation, GC, parser, prefetch, and data-layout candidates. The release contains five platform archives, individual checksum sidecars, aggregate checksums, an SPDX SBOM, and the DSR build manifest.
Published release: GitHub Release v0.21.2.
This release publishes the profile-driven work staged under the tag-only v0.21.1, plus the
final Nix packaging correction. The campaign completed all 50 requested iterations, but credits
only improvements that survived command-level measurement, output-equivalence checks, focused
causal tests, and the full Go verification suite.
22305d12
made that lifetime explicit: evict the record set first, then place its backing buffer in a
one-slot, largest-capacity spare owned by the streaming git cat-file --batch reader. The next
blob re-slices that storage when it fits instead of allocating and zeroing another large byte
array. Only one spare is retained, so reuse stays bounded rather than becoming a memory cache.5992ff99901b1c5abf8ccf3b1a9e3d2490a6f0eda1742cad938e7b3ff9809918.p=0.00098. Five traced
pairs reduced mean GC cycles from 25.8 to 13.0 (49.61%). Wall time improved 2.26% but missed
significance (p=0.0547), while peak RSS increased 0.177%; therefore this release claims lower
CPU and GC work, not lower wall latency or memory usage.4b685960
added a stats-consuming path so --robot-insights can pass the completed GraphStats it already
owns. Previously a planted 540-issue batch performed 540 redundant analysis-cache decodes through
TopWhatIfDeltas -> computeWhatIfDelta -> Analyze. The focused same-worker benchmark moved from
4.4108 s / 1.648 GB / 8,530,586 allocations to 3.203–16.564 ms / 1.444–4.931 MB /
8,504–26,341 allocations. This is a scoped batch benchmark, not a whole-command latency claim.5b73a6b6
routes the handler's completed statistics into advanced-insight generation instead of launching
another analysis merely to recover the same cycle list. Sentinel-cycle tests prove the supplied
statistics control the result, while nil callers retain the ordinary analyze-on-demand fallback.a83bf01c
reduced a direct-loader benchmark by 13.00% and allocations by 33.63% while replaying malformed
and invalid-UTF-8 inputs through the standard library for exact behavior. It did not improve the
dominant cold-correlation command path, so it is not included in the 11.44% release claim.854a8070 and
0a0838ec, ensuring profiling
completes before robot dispatch exits instead of leaving zero-byte or truncated profiles.GOAMD64=v3, fixed GC pacing, smaller transport
buffers, direct event fusion, prefetch windows, alternate record tables, and other promising
candidates were rejected when end-to-end confidence intervals crossed zero, system CPU or tails
regressed, memory worsened, or the active profile placed too little cost in the proposed seam.
These results and retry conditions remain in the pinned
hotspot table
and negative-evidence ledger.22305d12
— recycle evicted Git blob buffers on the measured cold-correlation path.4b685960 — consume
completed graph statistics across what-if batches.5b73a6b6 — reuse
completed cycle data in advanced insights.854a8070 and
0a0838ec — make robot
CPU profiles complete and trustworthy.bv v0.21.2; the Go module proxy resolved v0.21.2 to the tagged source commit.Staging tag only; no GitHub Release or binary assets were published for v0.21.1. Its performance, profiling, differential-test, and license-metadata c
Staging tag only; no GitHub Release or binary assets were published for v0.21.1. Its performance,
profiling, differential-test, and license-metadata changes were published immediately afterward as
the v0.21.2 release and are documented above. The version bump was necessary because the
v0.21.1 tag was already immutable when the final Nix usage correction landed.
defer_until is honored everywhere ( #191 ): beads with a future defer_until are now withheld from every ready surface — --recipe actionable , triage t
defer_until is honored everywhere (#191): beads with a futuredefer_until are now withheld from every ready surface — --recipe actionable, triage top picks, track/label picks, --robot-nextdefer_until behave as before, and the field--robot-insights per-entry disk cache (v3 layout) (#192): the cached--no-cache because cache validation walked the.beads/ tree per lookup and the single-file cache decoded and.beads/ entries, and the cache is a per-entry layout with atomicupdated_at < created_at) and JSONL parse dropsload_stats block on every hand-rolled robot JSONcurl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/beads_viewer/main/install.sh | bash
# or, from an existing install:
bv --updateFull Changelog: v0.20.0...v0.21.0
quick_ref.open_count /
project_health.counts.open now count ONLY issues whose status is exactly open (previously:
every non-closed issue, i.e. open+in_progress+blocked+deferred), and
quick_ref.blocked_count / counts.blocked now count ONLY issues whose status is exactly
blocked (previously: every non-closed, non-actionable issue). Both now always equal the
corresponding counts.by_status entries. The legacy aggregates are preserved under
semantically accurate names: not_closed_count / counts.not_closed (old open_count) and
not_actionable_count / counts.dependency_blocked (old blocked_count), with the partition
invariant not_closed == actionable + not_actionable. Consumers that relied on
counts.open meaning "non-closed" must switch to not_closed; consumers that relied on
counts.blocked meaning "dependency-blocked" must switch to dependency_blocked /
not_actionable_count. This also aligns the triage counts with the bundled viewer's strict
status tiles..gitignore handling (#179, revisiting #34/#151). bv no longer unconditionally
appends .bv/ to the repo's committed .gitignore. It now prefers .git/info/exclude
(no repo litter, invisible to collaborators, shared across linked worktrees — worktree
.git pointer files and their commondir indirection are resolved), skips writing entirely
when the project is not a git repository or when .bv is already covered by the repo
.gitignore, .git/info/exclude, or the user's global gitignore (core.excludesFile from
the global git config, or the $XDG_CONFIG_HOME/git/ignore default). A new
BV_NO_GITIGNORE environment variable (any non-empty value) disables all ignore-file
management. Everything remains pure file I/O — no git subprocess, no git-binary
dependency — and bv still never deletes or rewrites existing ignore entries; appending to
.gitignore survives only as a last-resort fallback when .git exists but the exclude file
is unusable.Reliable light/dark theme selection (bv-128, idea from PR #178). New --theme flag
(light | dark | auto) plus a top-level theme: key in ~/.config/bv/config.yaml,
resolved once at startup with the precedence --theme → BV_THEME → config → auto-detect.
The resolved preference is now applied to the global lipgloss renderer
(lipgloss.SetHasDarkBackground), fixing the pre-existing BV_THEME override, which only
touched per-model renderers while the bulk of the UI (package-global styles, badges, glamour
markdown) kept auto-detecting — and auto-detection falls back to dark whenever the terminal
doesn't answer the background query (common over SSH and in tmux/screen), leaving light
terminals with near-white, unreadable text and no working escape hatch. Invalid --theme
values warn on stderr and resolve to auto-detect.
Bounded robot liveness for the triage history prologue (#166). The git-history correlation
step of --robot-triage / --robot-next now runs under a hard budget (default 10 s),
overridable via --robot-history-timeout-ms or BV_ROBOT_HISTORY_TIMEOUT_MS (0 =
unbounded). On timeout the in-flight git subprocess is killed (the correlation package now
threads a context.Context into every git invocation via exec.CommandContext) and triage
proceeds without history. The outcome is surfaced as meta.history_status
(ok | error | timeout; omitted when history generation was not attempted).
Nothing published for this version
--id-pattern ( #188 ): custom bead-ID regex for trackers whose IDs lack a numeric suffix, so correlation works with non-standard ID schemes out of the
--id-pattern (#188): custom bead-ID regex for trackers whose IDs lack a--robot-triage --brief ( #183 ): compact triage output mode for agents that only need the headline recommendations, not the full analysis payload.
--robot-triage --brief (#183): compact triage output mode for agents that--robot-file-hotspots,--robot-file-beads, and --robot-impact disagreed for the same path--theme light|dark selection for--robot-next claimability no longer.git/info/exclude and adds aBV_NO_GITIGNORE opt-out.Nothing published for this version
584a14b feat(cli): add bv upgrade subcommand for self-update
bv upgrade subcommand for self-update (#177)Nothing published for this version
Full Changelog : v0.17.0...v0.17.1
Full Changelog: v0.17.0...v0.17.1
Nothing published for this version
Nothing published for this version
Nothing published for this version
550fb23 chore(release): v0.17.0 — robot-path perf overhaul, fixes, dep refresh 38d093a feat(ui): left-click to focus panel and select row (bv-162) 8dc
550fb23 chore(release): v0.17.0 — robot-path perf overhaul, fixes, dep refresh
38d093a feat(ui): left-click to focus panel and select row (bv-162)
8dcf388 fix(perf-review-2): negative-index panic + per-commit cache self-wipe
8eb099e test: probe custom JSON codec for pointer historyArtifact cache entries
10c9c24 fix(perf-review): 6 bugs found in fresh-eyes review of the optimization passes
02af07f skill-loop: pass 14 complete; full suite green (e2e incl), all gates clean
017f6ac docs(perf): final scenario matrix after pass 14 (co-commit incremental)
d033a18 skill-loop: mark pass-14 verification tasks done
2831c57 test(perf): date-stable golden normalizer (day-count fields) + pass-14 tracker
5c483de docs(perf): record pass 14 co-commit incremental cache in hotspot table
7e8a6bd perf(correlation): persistent per-commit co-commit cache; new-commit path skips co-commit git log (#161)
f42388e perf(docs): record cold-path passes 11-13 scenario matrix
609912f perf(correlation): content-addressed per-commit extraction cache
f2383c5 perf(correlation): goccy for parseBeadJSON (drop stdlib checkValid pass)
d02f5cb perf(correlation): split cache so bead edits don't bust HEAD-only extraction
6e121b2 skill-loop: extend with cold-path passes 11-13 (user-approved)
bb91105 perf(docs): record final 10-pass A/B results (orig vs final)
ff1bc91 perf(loader): size-gated morsel-driven parallel JSONL parse
d44ae38 skill-loop: record pass 9
a38697b perf(analysis): compute data hash once per robot invocation
Performance release: a profile-driven overhaul of the agent-facing robot path makes repeat
--robot-* calls roughly 25× faster (warm triage ~2.3 s → ~0.09 s) and cuts git
subprocesses from ~340 to 3 — all while keeping output byte-identical (verified by golden and
differential tests). Also bundles the correctness fixes and a fresh-eyes bug-review pass found
during the optimization work, plus a routine dependency refresh.
--robot-triage / --robot-next / --robot-plan / --robot-insights)git show per commit with 2 batched
git log calls; extract bead lifecycle via deduped --raw blob snapshots instead of
git log -p; added a persistent correlation result cache keyed on HEAD + beads-hash + opts so
repeat calls skip git extraction entirely. Cold-path: split the cache so working-tree bead edits
no longer bust the HEAD-only extraction, and added content-addressed per-commit event and
co-commit caches keyed by immutable commit SHA, so advancing HEAD only processes the new
commits (#160, #161).issues.jsonl once on the robot path (fused load + validation
via a typed probe), memoize the data hash per invocation, and added a size-gated
(≥ 4 MiB) parallel JSONL parse for large stores.blocked_by (#158).--watch-export with adaptive backoff and skip exports via the canonical
content + dependency hash (#159).BeadIDs dropped from the HEAD
artifact cache; rejected a fresher empty/non-issue JSONL from shadowing the real issues.jsonl;
fixed parallel-parser ParseStats merge and an off-by-one max-capacity line boundary; stopped a
transient git failure from poisoning the co-commit cache; fixed a possible readBlobs deadlock
on a cat-file parse error; fixed a negative-index panic and a per-commit cache self-wipe.git.sr.ht/~sbinet/gg, mattn/go-runewidth,
golang.org/x/{image,sync,sys,term}, modernc.org/sqlite) and re-vendored canonically. See
UPGRADE_LOG.md.d07839c fix(release): install GoReleaser v2 so the version:2 config publishes
Nothing published for this version
Nothing published for this version
Patch release focused on updater correctness, release artifact reliability, and hardening fixes found during fresh-eyes review passes.
Patch release focused on updater correctness, release artifact reliability, and hardening fixes found during fresh-eyes review passes.
Update vX.Y.Z so it is not confused with the running bv --version value.vvX.Y.Z-next.0.16.2.Patch release focused on updater correctness, release artifact reliability, and hardening fixes found during fresh-eyes review passes.
Update vX.Y.Z so it is not confused with the running bv --version value.latest/download aliases, publish Windows as a zip archive, and update the GoReleaser config to v2 syntax.vvX.Y.Z-next.--as-of dates from commit history and filter stale data sources by true newest time.Nothing published for this version
Nothing published for this version
Nothing published for this version
Patch release focused on dependency freshness, reproducible vendored builds, and release metadata cleanup.
Patch release focused on dependency freshness, reproducible vendored builds, and release metadata cleanup.
modernc.org/sqlite 1.50.1, fsnotify 1.10.1, pgregory.net/rapid 1.3.0, current golang.org/x/* packages, goldmark 1.8.2, chroma 2.24.1, and terminal-width/runtime helpers./dp/toon-go dependency is already at the latest local commit used by go.mod.bv-graph-wasm to getrandom 0.4 with the wasm_js feature.v0.16.1..beads/.write.lock files ignored and out of release commits.main.SHA256SUMS, checksums.txt, and per-asset .sha256 sidecars.Dicklesworthstone/homebrew-tap updated to 0.16.1.Dicklesworthstone/scoop-bucket updated to 0.16.1.Full diff: v0.16.0...v0.16.1
Patch release focused on dependency freshness, vendored reproducibility, and release metadata cleanup.
modernc.org/sqlite 1.50.1, fsnotify 1.10.1, pgregory.net/rapid 1.3.0, golang.org/x/* packages, goldmark 1.8.2, chroma 2.24.1, and terminal-width/runtime helpers./dp/toon-go dependency is already at the latest local commit used by go.mod.bv-graph-wasm to getrandom 0.4 with the wasm_js feature.v0.16.1.main..beads/.write.lock files ignored and out of release commits.Release focused on robot registry hardening, scoped graph/search workflows, static export improvements, and broad robustness fixes.
Release focused on robot registry hardening, scoped graph/search workflows, static export improvements, and broad robustness fixes.
--robot-triage scoping via --graph-root subgraphs.IssueReader interface for more flexible data loading.O key for opening beads in $EDITOR (550f3bd)truncate() against negative/small max values and nil process handles (816f9c3)strings.Repeat and normalize whitespace status (a0a35ee)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Patch release fixing Cloudflare Pages deployment on headless servers.
Patch release fixing Cloudflare Pages deployment on headless servers.
Patch release for a wrangler auth hang discovered immediately after v0.15.0.
Patch release for a wrangler auth hang discovered immediately after v0.15.0.
Major release focused on br/beads-rs compatibility, expanded status types, security hardening, and POSIX-compliant CLI flags.
Major release focused on br/beads-rs compatibility, expanded status types, security hardening, and POSIX-compliant CLI flags.
labels table for br/beads-rs SQLite compatibility (19437c4)--db flag and BEADS_DB env var for configuring database path (#125) (b56ddae)flag to pflag for POSIX double-dash options (064b3d0)bd-to-br command migration across all source and tests (f9ba482, 6bce598)github.com domains to prevent credential leaking on redirects (ccd23d0)GITHUB_TOKEN support for self-update (#116, #117) (2ff6cab)--agents-* CLI flags for AGENTS.md blurb management (8e9c656)GetActionableIssues (b14e9c4).beads/ directory changes (#127) (9464db4)WalkDir for cache invalidation (d1e8233)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Expanded robot-mode CLI with additional machine-readable outputs.
Security and reliability fixes for the static HTML export.
Cache-busting fix for GitHub Pages deployments.
Cache-busting fix for GitHub Pages deployments.
<script> tags for GitHub Pages (fcf1b7f)Prevent stale data on GitHub Pages updates.
Prevent stale data on GitHub Pages updates.
Major release introducing smart multi-source data detection, TOON format, live-reload preview, resizable split panes, and the --robot-docs / --robot-s
Major release introducing smart multi-source data detection, TOON format, live-reload preview, resizable split panes, and the --robot-docs / --robot-schema commands.
.beads/ directories (#88) (2016b25, af5499b)beads.jsonl over issues.jsonl for backward compatibility (87f36d7)--format json|toon for token-optimized output in robot mode (4f5f032)--stats for bv robot output (ebfeb6f)--robot-docs for machine-readable documentation (0c9f6a3)--robot-schema for JSON Schema output (9213bc5)RobotEnvelope wrapper across all robot commands (e6609dd)--preview (4b6a095)y shortcut to copy bead ID in list view (a9ff252)robot-triage using git history (157c3c7)review status (5fc1a70)~/.local/bin to avoid requiring root (32785d4)Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →