github gastownhall/beads v1.4.0-rc.1

pre-releaseone hour ago

beads v1.4.0-rc.1

Pre-compiled binaries for Linux, macOS (Intel & Apple Silicon), Windows (AMD64 & ARM64), Android/Termux (ARM64), and FreeBSD.

Installation (release candidate)

This is a prerelease for validation. The stable install channels —
Homebrew, the install.sh / install.ps1 scripts, npm, and PyPI —
intentionally keep serving the latest stable release, so they will not
install this RC. Use one of the methods below.

Manual download (recommended):
Download the archive for your platform from the Assets below, extract it,
and place bd on your PATH.

Go install (pinned to this RC):

go install github.com/steveyegge/beads/cmd/bd@v1.4.0-rc.1
# For embedded Dolt support:
CGO_ENABLED=1 GOFLAGS=-tags=gms_pure_go go install github.com/steveyegge/beads/cmd/bd@v1.4.0-rc.1

1.4.0 is a one-way upgrade. Back up first. Consenting to the schema migration (bd migrate schema, --force, or BD_ALLOW_MIGRATE=1) moves a 1.2.x or 1.3.x store to schema v74. After that, bd 1.3.x and older refuse the database. There is no going back to 1.3.4 except by restoring a backup.

  • Validate on a copy, or on a store you have backed up with your current bd (bd dolt push, a JSONL export, or bd backup sync).
  • Every Dolt server bd talks to, and the dolt CLI on PATH, must be 2.6.0 or newer.
  • Read Upgrade notes and Known issues under [1.4.0-rc.1] in CHANGELOG.md before installing.

Known issues found after the notes were written (fixes queued for rc.2):

  • bd github sync can lose label edits (#8409, a 1.4.0 regression). A label added or removed locally since the last sync is dropped on both sides, because sync pulls before it pushes. Until rc.2, run bd github push before every bd github sync or pull.
  • bd github can skip beads linked under a renamed or transferred repository (#8399, also in 1.3.3 and 1.3.4). A transient GitHub error during the repository-name lookup is not reported, and a later pull can overwrite those beads' unpushed local edits. Push before pulling, and re-run a sync that hit GitHub errors.
  • bd backup restore --force against a Dolt server with its own filesystem. The rc.1 notes call #8413 open; it is now merged on main for a server on another host and queued for rc.2. A container reached at localhost still needs the backup mounted at the same path.
  • In server mode, bd doctor can report a version mismatch after bd migrate schema (#7283). Run bare bd migrate once per database.

When 1.4.0 ships, install it by hand. bd doctor ranks 1.4.0-rc.N above 1.4.0 (#6595), so it will not tell you an upgrade is available.

Changelog

Features

  • 2f1e8be feat(backends): registry Remote + OpenWith options; beads.OpenBestAvailableWith for embedders (#7188)
  • 4e4ebdb feat(backup): proxied auto-backup on managed-local, serialized with bd backup sync (#6879)
  • c69dd30 feat(backup): route the backup family over proxied-server, refused by design off-host (proxied-parity S3) (#6584)
  • 37acca9 feat(cli): add --if-revision compare-and-swap guard to update/close/assign/delete (#7203)
  • d8d8bf5 feat(cli): bd create --graph via one atomic BatchApplier request; --if-revision on bd reopen (#7209)
  • 4af58c9 feat(count): Counter scope — ParentID, NoParent, ExcludeTypes, ExcludeStatus (issues.count.scope) (#7199)
  • e8f3183 feat(count): --include-ephemeral, the plane knob bd count never had (#6240)
  • 9017d33 feat(count): accept --has-metadata-key (#6282)
  • 2670852 feat(count): support --metadata-field filtering (#6024)
  • 12b19a6 feat(dep): detect cycles through tracks edges (#6148)
  • 3438ae2 feat(dolt): require Dolt 2.6.0 outside embedded mode (#7836)
  • a3a64a8 feat(doltserver): add fenced restart and remotesapi listener support (#6020)
  • db1ddbd feat(embeddeddolt): warn when a stored peer suppresses an ambient DOLT_REMOTE_PASSWORD (#6997)
  • b485a09 feat(gate): bd gate create --repo names the repository a gh:run/gh:pr gate is checked in (#7176)
  • bcf4da3 feat(github): sync epic/child and blocks relationships to GitHub (#5971)
  • ea0f6e1 feat(http): advertise issues.update.claim and route claims by it (S24a/b) (#7555)
  • 4450fe9 feat(http): bd blocked over bd serve (blocked.list), plus bd blocked --flags [--raw] (#7649)
  • 47d5db3 feat(http): bd heartbeat over bd serve (issues.heartbeat), and close the re-arm orphan-lease race (#7600)
  • 3862b03 feat(http): gate await members on create and update over bd serve (#7589)
  • c4e667c feat(http): list/show counts/dep tree/ping over http, the advertised external-dependency policy, one-lookup not-found (S6b/S6c/S6d) (#7471)
  • 70887e7 feat(http): serve IsBlockedBatch through the BlockingAnnotator role behind dependencies.blocking.isBlocked (#7552)
  • a7fe6ae feat(httpapi): PATCH /v0/beads/issues/{id} accepts claim, the wire spelling of bd update --claim (#6890)
  • 6cd1184 feat(httpapi): opt-in large issues:batchApply envelope (≤1000 items, one transaction) (#7051)
  • 5439be9 feat(httpapi): wire-shape signal — wire_revision, client floor, golden shape digest, param tokens (#7182)
  • 533f952 feat(httpclient): BatchApplier over HTTP — handshake cap, dep_add lineage on the wire, gc mappings (S5) (#7265)
  • 6d21d33 feat(httpclient): OSS HTTP client store and roles + a served http conformance leg (contributed from bd-enterprise under MIT) (#7247)
  • 6d7feca feat(httpclient): OSS HTTP client wire/encode layers (contributed from bd-enterprise under MIT) (#7210)
  • 2dda705 feat(httpclient): write-role conformance on the http leg — ceiling to zero, sweeper extension (S4) (#7251)
  • 4c29640 feat(ids): say when a partial ID resolved to something else (#6302)
  • 65a4831 feat(label): add --prefix to bd label remove (#5384)
  • e6a891b feat(list): bd list --no-assignee, --title and --id over http behind per-parameter tokens (S15b) (#7550)
  • 601be8a feat(list): bd list's remaining filters over http behind issues.list.filters (#7647)
  • 74a67c3 feat(prime): add prime.disabled so a session can turn off an inherited bd prime hook (#7595)
  • 2ec0b2f feat(purge): live-dependent protection, --wisps-plane selector, hour-precision --older-than, --limit (#6883)
  • 1ea5145 feat(remember): opt-in memories.budget-chars — warn at 80%, refuse a write that crosses the corpus budget (--force overrides) (#6508)
  • dbaa463 feat(roles): BatchGetter role and POST issues:batchGet (#7248)
  • 470ec83 feat(roles): LeaseReclaimer role, POST issues:reclaim, and bd reclaim on both routes (S9) (#7412)
  • 9407cba feat(schema): soft watchdog warning for long-running schema migrations (#5997)
  • 4caeeff feat(serve): name the blockers on a live-blocker not_closable (#6893)
  • 5d2c01b feat(show): --comments-tail N renders only the last N comments in text mode (#6618)
  • c18db4e feat(storage): add events/bd_events_journal/bd_events_seq to cursorRealityFloor sentinel set (port of #6547 to main) (#7480)
  • 3efcd35 feat(storage): carry the git data ref of a git-backed Dolt remote (#6521)
  • 5011528 feat(storage): commit-stamped create sequence (arrival_seq) on every backend (BD-5) (#7912)
  • 9353122 feat(storage): retaining sweeps retire ids with permanent tombstones (BD-6) (#7931)
  • 788a5c1 feat(storage): shape-adaptive events journal writes and reads (PR A1) (#7211)
  • e226083 feat(storage): workspace types.retained — the retention doors keep retained types (BD-6c) (#7932)
  • 6530c75 feat(update): add -l shorthand for --add-label, matching bd create -l (#6139)
  • e6f739b feat: green — Salvage from closed PR #5925: replace stale server_mode TODO comment in dolt store.go (refs be-ayur5) (#6481)

Bug Fixes

  • 874e286 fix(backup): anchor watermark before snapshot (#7044)
  • 8adcd25 fix(backup): point the size-cap pause advice at levers that end it (#7074)
  • e677d90 fix(backup): stop attributing proxied auto-backup OFF to a missing git remote (#6694)
  • 65afdc1 fix(backup): validate manifest before destructive restore (#7192)
  • ff4f46e fix(bazel): go_test_pinned_shard.sh runs under bash 3.2 (macOS Main red since #7413) (#7423)
  • b8e6ba1 fix(bazel): one nogo-validating lane per race configuration (F5 S1) (#7479)
  • dff41b4 fix(bazel): re-vendor signed-duration decode fix from gascity (#7374)
  • a945619 fix(bazel): re-vendor the BEP test-timing clamp from gascity (extractor 1.1.1) (#7477)
  • 3e7705a fix(bazel): remove host-go dep from compact GC test; drop frozen shard blocks (#7478)
  • 4df3956 fix(bazel): the root go_srcs glob skips Bazel's convenience symlinks, so //cmd/bd tests cache (#7714)
  • c26cf1f fix(bd): cap auto-backup destination size to stop unbounded growth (#6071)
  • 51a7c8e fix(beads): make an explicit BEADS_DIR authoritative during discovery (#6938)
  • b911ed2 fix(blocked): climb through a blocked parent with no reason row of its own (#7420)
  • ab1e051 fix(bootstrap): clone through the Dolt port later commands dial (#7804)
  • 4a67d0d fix(bootstrap): cut the host part before stripping userinfo (mc-gcmer) (#7616)
  • 8823177 fix(build): build with Go 1.26.10 and uv 0.13.4 for the eMudhra CA distrust (#7732)
  • 43b1fb2 fix(build): pair Darwin SDKs with the native Apple linker (#7460)
  • 013834d fix(ci): keep ci-scope.sh and main-ci-alert.sh bash 3.2 clean (#7832)
  • aec138e fix(ci): never re-add the review label to an open worker-env sync PR (#7805)
  • 82872a8 fix(ci): rbe pre-warm survives a failed gh run list under bash -e, and clamps an over-long worker count (#7162) (#7163)
  • 46f182a fix(ci): require direct workflow build tags (#5679)
  • 1f7a5f1 fix(ci): resolve gofmt from go.mod's toolchain, not PATH (be-gx8) (#6294)
  • 57eee41 fix(cli): --if-revision outranks the reassign fence; recognize bare ErrVersionMismatch (#7216)
  • de8567e fix(cli): --until, --defer and --due rejections name the supported unit set (#5718)
  • cbf84cb fix(cli): bd list --wisp-type cannot match a row — register the plane knob it needs (#6098)
  • 92f9293 fix(cli): accept --flat on bd ready as an alias for --plain (#5724)
  • f005323 fix(cli): document that bd list --format exports the dependency graph (#5723)
  • 330c3de fix(cli): guarded close replays molecule auto-close and open-children warning (#7222)
  • 3fc493d fix(cli): name the skipped user-global ~/.beads in workspace refusals (#7950)
  • ed15632 fix(cli): preserve redirect-source dolt_database for no-DB commands, guarded on explicit targets (#5774)
  • c67a36e fix(cli): refuse backup init/sync/remove/restore and import under strict --readonly (#7673)
  • bc1cd64 fix(cli): refuse graph workspaces marked by graph-preview-format (#7722)
  • 1fcd715 fix(cli): refuse graph_mode workspaces and keep their metadata marker on save (#7671)
  • 5965314 fix(cli): refuse to initialize an issues.jsonl-only clone of a pre-config.json project (#7871)
  • c938c0a fix(cli): skip store init for store-free config get keys (#7905)
  • 39aa86f fix(cli): stop eleven subcommands shadowing the root --json flag (#6245)
  • f367e08 fix(close): emit the --json failure report for a single refused id (bd-5yswb) (#7614)
  • 01bd1f1 fix(close): make --json failed[].error route-independent (post-merge #6740) (#6771)
  • 8bb99b4 fix(close): verify bead gates on the proxied-server route (#5861 item 1) (#6962)
  • 235275e fix(compact): keep writes that reach main while bd compact runs (supersedes #7789) (#8046)
  • a138433 fix(compact): refuse out-of-order date partitions and verify the replay (#6645) (#8050)
  • fb43d97 fix(compact): replay cherry-picks in commit_order, not commit date (#6644)
  • 8269a88 fix(compact): target external GC at the active database (#6327)
  • 29aba4f fix(config): bd config unset reported success while the key stayed set (#5760)
  • f7b9465 fix(config): bound setting key and value lengths in the shared role rule (#8014)
  • 54c1300 fix(config): dotted keys round-trip through SetYamlConfigInDir/UnsetYamlConfig (bd-zj95, 1.3.1) (#6574)
  • 4dc96f6 fix(config): identify native config environment in path errors (#6325)
  • ae4a04c fix(config): name profile variables in path error (#5671) (#5676)
  • 7963165 fix(config): pin role writes to a fresh common-config context (#6454)
  • 12f387d fix(config): replace config.yaml in one step instead of rewriting it in place (#8199)
  • c29943f fix(config): step over list items when unsetting a dotted key (mc-2nfr1) (#7613)
  • 395e7be fix(config): stop bd config set dropping the file's trailing newline (#7669)
  • 4f81ffa fix(config): stop bd config unset dropping the file's trailing newline (#6749)
  • 994f5b8 fix(config): stop bd config set truncating config.yaml at a 64 KiB line (#7670)
  • 6ba70b0 fix(configfile): persist effective proxy idle timeout (#6657) (#6673)
  • 127ff72 fix(configfile): resolve an absent proxy idle timeout on sidecar load (bd-mnhq6) (#7617)
  • d417570 fix(conflicts): diagnose merges blocked on events after migration 0062 (bd-iba202) (#8049)
  • e1baea6 fix(conformance): cast metadata to CHAR in the batch-apply probes (#8030)
  • 1cc1904 fix(context): resolve from .beads when outside a git repository (#4772) (#4792)
  • cadad18 fix(create): keep what a metadata-less routed target already holds (#7771)
  • e46de42 fix(create): read a --file batch's ### Deps with the --deps grammar (#7508) (#7928)
  • f7bf53f fix(create): render proxied target store refusal as typed error (#6732)
  • 67b066b fix(create): say --file is one issue per ## heading (#5921)
  • 6f9b540 fix(dbproxy): Shutdown waits for a start's spawn marker without competing for its lock (#8056)
  • b184dae fix(dbproxy): managed-local dolt readiness proves port ownership; recover onto a free port (#7184)
  • d803ec9 fix(dbproxy): retire the proxy when its Dolt backend exits cleanly (#6937)
  • d6b95b3 fix(dbproxy): rotate oversized proxy.log and server.log at proxy start (supersedes #7733) (#7735)
  • c9a36b2 fix(dbproxy): wait out a live starter's spawn marker instead of a fixed 5s (#7249)
  • 7e4199f fix(defer): resolve bd defer/undefer IDs once (mc-qec7j) (#7619)
  • fc2351a fix(defer): undefer clears a stray defer_until when status isn't deferred (ga-bq3w5) (#6390)
  • d95de62 fix(delete): cascade follows only parent-child edges (GH#6301) (#8078)
  • fefcdf6 fix(delete): resolve ids exactly, never by prefix abbreviation (#7375)
  • ce907a9 fix(dep): key the status prune's parent chain on expanded rows (#7955)
  • 7e465cb fix(dep): let --quiet silence the unresolved-target warning (#7941)
  • 851aa2f fix(deps): bump dolt/go past upstream manifest-missing-chunk defense (#4070) (#5931)
  • 7477ec1 fix(deps): bump grpc to 1.83.2 and thrift to 0.24.0 (#7495)
  • 41b0a80 fix(deps): bump kin-openapi to 0.149.0 (#7812)
  • 9d4ebf4 fix(deps): bump klauspost/compress to v1.20.2 (GO-2026-6865) (#8349)
  • cfeba5f fix(deps): bump opentelemetry-api to 1.45.1 in beads-mcp (#7813)
  • 5f56ab2 fix(deps): enforce external capability blockers across ready/claim/close (#4769) (#4753)
  • 3b49066 fix(deps): raise x/net and x/crypto past every fixable advisory that reaches the built binary (#6355)
  • bab9a8a fix(doctor): accept a .beads/.gitignore stricter than 0600, warn if tightening fails (#7863)
  • c8cc5c0 fix(doctor): accept a leading v in version strings (#6153)
  • 4f84628 fix(doctor): avoid a leading separator in empty gitignore (#6421)
  • f9ec277 fix(doctor): close repos.additional type-discovery residuals from #7738 (#7765)
  • a623d81 fix(doctor): delete only what one positive-ownership plan marks safe, never a database (#7828)
  • bedc36d fix(doctor): dial a probe-found server's remotesapi at its configured host (supersedes #7724) (#8002)
  • 6598589 fix(doctor): don't flag shared-server global database as phantom (#6599) (#6634)
  • 4873699 fix(doctor): escape database identifiers instead of rejecting them (#6412)
  • 765c272 fix(doctor): gate --fix when schema is skewed (#5145)
  • 671db65 fix(doctor): ignore the generated dolt-server-config.yaml (#5978)
  • 37f9475 fix(doctor): import issues.jsonl only into a database the repair created or found with no issues (#7899)
  • 1336606 fix(doctor): limit the Classic Artifacts SQLite cleanup to what the scan reports (#7797)
  • e802794 fix(doctor): reap leaked test dolt sql-servers from CGO_ENABLED=0 suites (#5917)
  • 3e9cbb1 fix(doctor): refuse repos.additional graph workspaces without migrating (#7738)
  • e30823f fix(doctor): report stealth exclude read failures without repair advice (#6427)
  • 66a47bb fix(doctor): skip nested graph workspaces in the Classic Artifacts walk without migrating (#7766)
  • 4c56140 fix(doctor): stop flagging cross-repository dependency targets as orphans (supersedes #8154) (#8400)
  • 8ffd4e5 fix(doctor): stop offering doctor --fix as an unopenable-store rebuild (GH#4521) (#8052)
  • 1dfdc96 fix(doctor): stub cleanup removes only bd runtime leftovers; --clean --json prints only JSON (#7869)
  • c33738d fix(doctor): tighten .beads/.gitignore perms even when patterns are complete (#5634)
  • f1756b4 fix(doctor): untrack dolt-server-config.yaml and dolt-server.activity (#6191) (#7856)
  • d7bcee6 fix(dolt): apply metadata socket on config opens (supersedes #7475) (#8082)
  • 916887c fix(dolt): apply the pool read/write deadline knobs on every open path (#6145)
  • ab25860 fix(dolt): config.yaml pool-deadline rung reaches library consumers (#6475)
  • 146919c fix(dolt): contain bd dolt start on proxied workspaces; make bd dolt status truthful (#6577)
  • fd54802 fix(dolt): decide Dolt server ownership with one host predicate (#7840)
  • ce8554f fix(dolt): dial an IPv6 Dolt host in both bare and bracketed spellings (#7803)
  • a3b5258 fix(dolt): explain Dolt's remote dangling-reference refusal on bd dolt push, bd sync and auto-push (#7910)
  • d4cc7fd fix(dolt): give federation tests real isolation, fixing a crash and a timeout flake (#5941)
  • e1ceedf fix(dolt): honor BEADS_DOLT_MAX_CONNS / dolt.max-conns on every store open (#7052)
  • c19a460 fix(dolt): migrate a matching disk-only remote into the SQL store (supersedes #7447) (#8006)
  • 26f0e8d fix(dolt): never push or pull a leftover .beads/dolt for a server bd does not run (#7870)
  • 328b927 fix(dolt): pass remote user to CLI transfers (#6554)
  • 73018a6 fix(dolt): publish the blocked-state recheck after its transaction commits (#6876)
  • 1ed5b33 fix(dolt): recheck dependents' blocked state after a close commits (#6719)
  • 4fa96b7 fix(dolt): redact URL credentials from transfer errors (supersedes #7644) (#8089)
  • e9a0ded fix(dolt): report an unresolved server port and refuse a phantom-database bd dolt start (#7736)
  • c153e3b fix(dolt): require proof the server serves the workspace's Dolt directory; reset-data keeps remote data (#7902)
  • 4f90c5d fix(dolt): resolve every Dolt endpoint and its credentials through one resolver (#7841)
  • af1c6ac fix(dolt): resolve show remotes from active root (#6718)
  • e6424ad fix(dolt): resolve status, show, context, doctor and fix endpoints through ResolveEndpoint (#7874)
  • b6be760 fix(dolt): server-mode bd ready must not wake defers under a migration freeze (bd-6zf0q5) (supersedes #7633) (#8086)
  • 9d646fc fix(dolt): server-mode bd ready never wakes expired defers (re-proposes #6082) (#6424)
  • a8a0427 fix(dolt): skip the no-op DOLT_CHECKOUT on fresh connections (#7322)
  • 0103d26 fix(dolt): stage versioned-history tables on the delete/sweep role plane (post-merge #6675) (#6844)
  • 3dc0444 fix(dolt): stop advising bd dolt start for a named-port external server (#7752)
  • 002e33a fix(dolt): stop push, pull and sync at a remote only the leftover copy records (#7893)
  • 7a81e29 fix(dolt): stop telling bd init not to run bd init on an identity mismatch (#5558) (#6745)
  • e4c51a2 fix(dolt): verify project identity for Path-only server-mode opens (#7947)
  • 8934869 fix(doltremote): treat s3:// as a native Dolt remote scheme (#5948)
  • 4cf36b0 fix(doltserver): auto-started dolt must own its port; move a taken bd-chosen port (#7201)
  • c1eadae fix(doltserver): count EPERM from kill(pid, 0) as a live process (#7864)
  • 087a4ec fix(doltserver): credit the suite's own HOME under a nested TMPDIR (#8201)
  • a7de564 fix(doltserver): port resolution and unreachable-server advice follow-ups to #7752 (#7767)
  • d430909 fix(doltserver): prove listener ownership on darwin with lsof and ps (#7232) (#7257)
  • 6e81290 fix(doltserver): recognize /var/tmp as a fixed temp root on Linux for sandbox-home detection (#6729)
  • 3b2b476 fix(doltserver): recognize GOTMPDIR as a temp-dir sweep root (Go 1.26+) (#6733)
  • 8da2ae4 fix(embeddeddolt): commit pending changes before push (#5433) (#5795)
  • 7121828 fix(embeddeddolt): keep gate notes in blunt lenient warning (bd-1z1pc) (#7612)
  • eb691bf fix(embeddeddolt): shape lenient gate warnings (#6660) (#6662)
  • 677e637 fix(env): allow GT_ROOT in a project .beads/.env (#8117)
  • b0c3c8f fix(epic): do not treat duplicate/wontfix closes as complete (#5138)
  • adf6a98 fix(events): end a --follow --json stream with one compact failure line (#7800)
  • 707ac90 fix(events): report a truncation that lands on a follower's stop (#7769)
  • e3a37f9 fix(events): stop quiet followers on stdin EOF (#7103)
  • 2917fa8 fix(examples): bump grpc to 1.83.2 and thrift to 0.24.0 in example modules (#7467)
  • d74c191 fix(export): fail bd export and keep the auto-export JSONL when a relation load fails (GH#6870) (#7855)
  • 02f0534 fix(externaldeps): guard explicit claims and batch closes (#6738)
  • dba70de fix(federation): actionable error when peer credentials cannot be decrypted (#6995)
  • cfadcde fix(federation): treat missing peer row as credential-free remote (follow-up to #5128) (#7606)
  • d6385e3 fix(flatten): soft-reset main so clone-local FKs and pending writes survive (bd-c5s3mv) (supersedes #6772) (#8175)
  • 1c513f4 fix(formula): derive beads-release's release branch from the version (#8375)
  • ac08cab fix(formula): don't write formulas under a GT_ROOT taken from .beads/.env (#8123)
  • 3477429 fix(formula): order nested loops' deps and reject a step needing its own loop (#7636) (#7963)
  • fe5b9d1 fix(formula): reject a waits_for gate with no spawner, and stop reporting invalid formulas as not found (#5761)
  • d0743f8 fix(formula): substitute vars in step assignee, labels, and metadata (#5758)
  • 685cf84 fix(gate): a budget spent during the intent probe still gets the final attempt (#7237)
  • b2d5cff fix(gate): add-waiter retries contention the store gave up replaying (#7648)
  • cbfc505 fix(gate): evaluate cross-rig bead gates via prefix routes (#5859)
  • b4c76a6 fix(gate): ordinary commands wait for maintenance operations, fairly; init waits up to 60s (#7225)
  • 9f9cfc4 fix(gate): report an unreadable store as an error, not a pending bead gate (#6404)
  • a6fcf91 fix(gate): resolve a bead gate whose awaited bead no longer exists (#6395)
  • 14da8ca fix(git): drop git location env from internal/git fixture commands (#7857)
  • cf68343 fix(git): preserve config read errors instead of treating them as absent (#6477)
  • cefcabb fix(gitenv): retain explicit null config suppression (#6461)
  • 0e7b758 fix(github): scope issue sync to the configured repository (supersedes #7794) (#8068)
  • e30d90b fix(github): version the push hash to repair issues left open pre-fix (#7933)
  • 3a18393 fix(gitlab): match pulled issues and links by project, not IID alone (#7866)
  • 5f4148d fix(graph): stamp created_at before a closed or started node's timestamps (#7519) (#7521)
  • d94e0c7 fix(history): print full commit hashes so bd show --as-of accepts them (#6730)
  • c5b3469 fix(hooks): allowlist prime args and exec os.Executable() in runBdPrime (#6414)
  • 13150ba fix(hooks): apply host key identity to Git environment filters (#6321)
  • 83cb820 fix(hooks): don't report foreign hooks as installed (#6274)
  • 343157e fix(hooks): export from linked worktree (#6717)
  • 6a4b4aa fix(hooks): identify the index context behind tracked-file refusals (#6457)
  • cb9a688 fix(hooks): keep standalone operations in one selected Git context (#6463)
  • 2e6289f fix(hooks): key the push-time suite on the remote ref, never on the local ref's shape (#7352)
  • 1337d99 fix(hooks): stop pre-push skipping the suite on large diffs (#8013)
  • b587154 fix(hooks): supervise bd from Perl so BEADS_HOOK_TIMEOUT stops it (#7753) (#7858)
  • 3344349 fix(hooks): warn on unsupported async execution (#5673)
  • e7ad85b fix(http): bd export over http through issueops.ReadExport (S21) (#7551)
  • b126a7d fix(http): bd gate check over HTTP through issueops.ListGates (#7578)
  • ae693ef fix(http): bd gate create, add-waiter and discover over a connected HTTP workspace (#7621)
  • d4ca893 fix(http): bd gate list over http through issueops.ListGates (S20) (#7549)
  • 9e2f25c fix(http): bd link over a connected HTTP workspace, through the DependencyEditor role (#7685)
  • eaed71f fix(http): bd promote over http through issueops.Promote and issues.update.persistence (S21b) (#7554)
  • ec55baa fix(http): bd show --current, recompute-blocked and search over http through issueops entries (S6e/S25/S26) (#7528)
  • 2b89e3f fix(http): finish the graph fence on the bd connect / bdhttp path (#7768)
  • dff9492 fix(http): gate check records a bead gate's sighting through Lifecycle.Update (#7604)
  • f32b18e fix(http): refuse graph workspaces in bdhttp.Attach/Connect and bd connect (#7737)
  • 925e26b fix(http): serve bd list --title-contains by folding it onto title (#7631)
  • dc5a23c fix(httpapi): fence concurrent guarded deletes served by bd serve (destructive data path) (#8227)
  • 048f5e5 fix(httpclient): bound response-header waits and retry stalled reads on another connection (#7553)
  • 773b537 fix(httpclient): dial a large batchApply under the server's extended budget (#7582)
  • edafcbc fix(httpclient): map Counter scope params and issues.count.scope capability (#7250)
  • 18b5c3c fix(httpclient): name the connect failure when bd serve cannot be reached (#7702)
  • b630f96 fix(httpclient): unlimited ready/query/list reads over http, client-capped (S15) (#7497)
  • ae4d7e9 fix(ids): report a hash two prefixes share as ambiguous (mc-ke8mg) (#7618)
  • e05000d fix(import): converge on resume and survive server pauses (wy-sbgucn)
  • 2878c53 fix(import): keep regular<->wisp dependency edges on import (wy-4276q8)
  • e8839c4 fix(import): normalize optional timestamps to UTC on insert (#5771)
  • 37ecb53 fix(import): resume fast path proves the lease row untouched too (wy-sbgucn)
  • 48b9e90 fix(import): seed issue_prefix from config.yaml before the batch guard needs it (#6624)
  • a3e1b24 fix(import): tolerate only typed dependency refusals, not walk-query errors (#7630)
  • 39b9ee1 fix(info): honor doctor.suppress.git-hooks in bd info (#6027) (#6710)
  • b81fdc0 fix(init): #5791 follow-up — name --recreate-missing without a paste-ready command; align help, playbook and ADR 0004 (#7070)
  • 3488dc4 fix(init): bd init --server --external starts no server; a failed bd init --server can be retried (#7674)
  • e3a12f4 fix(init): admit a server workspace whose .beads/dolt is empty so the version marker is written (#6935)
  • ac1ec5d fix(init): bootstrap Git in the selected project directory (#6459)
  • a42760e fix(init): correct --stealth flag help text to match actual behavior (#6725)
  • 21dac62 fix(init): drop bd dolt push from AGENTS.md Quick Reference without a remote (#7694)
  • 183565d fix(init): ignore beads store at OS temp root (#6641)
  • 2a00540 fix(init): persist the stealth no-git-ops flag in the project config (#7939)
  • d274841 fix(init): refuse to initialize directly in the home directory (#4635) (follow-up to #4795) (#7609)
  • 7d54548 fix(init): refuse to silently recreate a missing server-side database as empty (#5791)
  • 1d637e1 fix(init): select the project origin before proxied persistence (#6453)
  • beed11c fix(init): use selected hook context in embedded initialization (#6464)
  • 991e5e3 fix(init): validate a supplied destroy-token even when interactive (#6480) (#6639)
  • f2eb56a fix(init): wait up to 30s for the workspace gate so concurrent shared-server inits queue (#7200)
  • 70a12ba fix(init): write embedded excludes in the selected project (#6462)
  • f495639 fix(install): stage the release binary in the install dir and rename it over bd (#7860)
  • f85a4a0 fix(issueops): check Rows.Err in DeleteIssuesBySourceRepoInTx (supersedes #7054) (#8007)
  • e03604c fix(issueops): distinguish SQL in the arrival sequence guard (#8033)
  • 6d27a4f fix(issueops): enforce the close guards on every close leg (#7425)
  • d15958a fix(issueops): enforce the dotted-child dependency rule on every leg (#7424)
  • 1f1e82a fix(issueops): one default priority for every create path (#7426)
  • f21e3a8 fix(issueops): templates are read-only on every update leg (#7427)
  • 0b9e644 fix(label): report a no-op label edit instead of claiming it (#5988) (#6742)
  • 5cc896c fix(lint): suppress two darwin-only gosec findings and cross-lint the darwin build in CI (#6243)
  • 65005f8 fix(list): a typed --format beats a config json default (#6278) (#6708)
  • 9c94613 fix(list): correct --limit help for piped-output default (#6276)
  • d14ed67 fix(list): expose comment bodies in bd list/show --json (be-73x) (#6473)
  • f5a20fb fix(list): honor --status when combined with --ready (#5924)
  • c25059a fix(list): honor sort order in tree output (GH#6613) (#6617)
  • 53ce8b5 fix(list): never recurse forever on a cyclic tree in bd list --tree (#6553)
  • 4c48829 fix(list): print bd list --format dot in a deterministic order (#7688)
  • c2f5029 fix(list): refuse --watch with --format on the direct route too (#6277) (#6707)
  • 11ec3a6 fix(list): resolve short/partial parent IDs for --parent (#5440) (#5794)
  • 766c0bd fix(list): stop truncation hint padding a blank TTY line (#5927)
  • 2704d8a fix(list): union repeated --status/--state/--id; refuse repeated --type/--assignee (#5739)
  • 43a526b fix(make): check docs against the BUILD_DIR binary (#6318)
  • 713a7fb fix(make): preserve atomic Windows install replacement (#5638)
  • 8c889c1 fix(make): use built candidate path in smoke targets (#6363)
  • 5a3b720 fix(mcp): report reopen of an issue that is not closed (#7927)
  • 177a313 fix(mcp): require Python >= 3.11 so the lock resolves dnspython 2.9.0 only (#8200)
  • 559b5de fix(memory): preserve presence for empty values (#5964)
  • ce756a5 fix(metadata): require a JSON object for --metadata on create and update (#6035) (#6743)
  • 85eba5c fix(metrics): bound the send-metrics prune by the child's flush budget (#5937)
  • 147047e fix(metrics): make BEADS_MEM_PROFILE/BEADS_MEM_STATS reach the send-metrics child (#6507)
  • a3b003e fix(metrics): reap detached send-metrics flush children (#5933)
  • a690b0a fix(metrics): stop failing the reap test on a transient zombie (#6262)
  • 3cf21a1 fix(migration): extend the release catalog through v1.3.4 (bd-d17m3c) (#8391)
  • 11fa7f5 fix(mol): a dispatch hint for a command that does not exist, and a --ref bond that deadlocks (#5759)
  • a2d43e6 fix(mol): molecule reads, auto-close and close --continue over http through issueops entries (S16) (#7513)
  • 91a72ef fix(mol): route bond operand resolution like show/update/close (closes #4714) (follow-up to #4720) (#7622)
  • 102372d fix(notion): keep notion.token out of the Dolt database (#6676) (#6724)
  • 721e42e fix(notion): make the query page bound configurable and honour Retry-After (#6006)
  • 3402679 fix(output): route graph renderers and ratchet stdout writes (#5624)
  • 35bac24 fix(pour): reject --var names the proto cannot consume (#5762)
  • 6899813 fix(preflight): share checkout lint authority (#5780)
  • 8870c68 fix(prime): describe the memory split instead of prohibiting MEMORY.md (#6111)
  • 892a438 fix(prime): detect git remote from CWD, not BEADS_DIR context (#5139)
  • 5e0a5b6 fix(prime): document all three PRIME.md fallback tiers in --help (#6275)
  • 686bc79 fix(prime): honor shared-server mode consistently across bd prime's store resolution paths (#6589)
  • 5fdc1e3 fix(proxied): refuse to mint a fresh managed-local database over an empty root (#8043)
  • 027635c fix(proxy): bound proxied logs while the proxy runs; quiet generated dolt log level (#8037)
  • 6839936 fix(proxy): fail fast with a clear MySQL error when an external upstream is unreachable (#7181)
  • c507f3b fix(proxy): unsplit bd ready --gated, and stop policing a flag bd list lacks (#6697)
  • 5db60f4 fix(purge): preserve transitive live dependents (#7041)
  • 0e317c4 fix(query): apply bd list's piped-output limit policy to bd query (#6229) (#6744)
  • c7b46ad fix(query): decode UTF-8 in the lexer so non-ASCII values match (#7539) (#8084)
  • 4c473b4 fix(query): report an uppercase duration unit as an unparseable time, not a negated internal error (#7683)
  • 2e76377 fix(ready): --explain sorts a ready issue's blocking edges by status instead of calling a pinned dependency resolved (#7124)
  • a1bc167 fix(ready): keep the ReadyCounter span through externaldeps, and announce the interface break (#6748)
  • d76288a fix(release): build bd-android-arm64 with cgo against the Android NDK (#3538) (#7907)
  • 555b01d fix(release): name the version-drift remedies that work (#7083)
  • e866614 fix(remedy): print every config-, filesystem- and data-supplied remedy value through one shell- and terminal-safe printer (#7837)
  • 824d896 fix(reset): scan every hook bd installs, including prepare-commit-msg (#5566) (#7850)
  • e249a5a fix(routing): bind role detection to the bd -C target repo (re-port of #4242) (#5243)
  • 6c5f1b2 fix(routing): match routes.jsonl prefixes by longest leading match (#5048) (#6711)
  • 00adff8 fix(rules): compact previews unless --force and backs up before deleting (#8051)
  • 5bbfb17 fix(schema): add the missing wisps columns before migration 0053 (supersedes #8099) (#8389)
  • 1f6f2c4 fix(schema): dolt_ignore the temp table-rebuild intermediates (#6993)
  • 9311c24 fix(schema): keep issue and wisp updated_at across frozen migrations (#5981) (#8053)
  • c45ddef fix(schema): let pending ignored migrations run over dirty ignored tables (#5816) (#8245)
  • 00846a0 fix(schema): pin aux-rekey digest datetime rendering to DATE_FORMAT instead of bare CAST(x AS CHAR) (#6649)
  • 27700f4 fix(schema): probe cursor table before drift check (#5862) (#6492)
  • 827f164 fix(schema): probe schema_migrations before the HEAD hash read (bd-21dc1) (#7611)
  • 5ff8546 fix(schema): read the pre-upgrade events restore a page at a time, not per issue (#8047 follow-up) (#8401)
  • 9234900 fix(schema): recognize Dolt 2.6 drift text in the aux row re-key (#8395)
  • 7ac98ae fix(schema): restore pre-upgrade events on clones that adopt the events flip (#7039) (#8047)
  • 9fec68d fix(schema): retry a fresh-bootstrap heal reset that the server aborts (#5895)
  • 5c99a3d fix(schema): run migration 0059's and ignored/0015's recompute through a set-based plan (#6520) (#8194)
  • 5b9e938 fix(schema): stop the smart gate auto-migrating a data-behind clone (#6575) (#6658)
  • 3c205e0 fix(schema): suspend dolt_transaction_commit for the migration pass (#4470) (#8055)
  • 73702cc fix(schema): widen issue_versions.change_at to DATETIME(6) before any store accumulates real history (#6675)
  • 0bf1349 fix(scripts): check-doc-freshness.sh fails on duplicate Last-reviewed markers (#6482)
  • 4c4be78 fix(scripts): make check-doc-flags portable to BSD grep and fail loud on grep errors (#6026)
  • 7838c4b fix(scripts): update-nix-vendorhash no longer reports a build failure as success (#7504)
  • a4afdef fix(scripts): update-nix-vendorhash writes a stray default.nix'' on BSD sed (#6096)
  • 78089d4 fix(security): block executable settings from .beads/.env and workspace API (#7879)
  • 02764e2 fix(security): harden proxy and server startup on shared hosts (#7885)
  • fda3ccb fix(security): pass-3 dependency and toolchain updates (eMudhra follow-up + Oct-27 advisories) (#7925)
  • eda3326 fix(security): pin shared credential endpoints on first use (#7887)
  • 8373677 fix(security): stop option injection via sync remotes and beads-mcp argv (#7881)
  • 217ded3 fix(security): take .beads/.env values literally and refuse command and credential keys by name (#8137)
  • 2bc7f8d fix(serve): retire idle SQL connections before Dolt (#6741)
  • a09a191 fix(setup): accurate bd setup claude --global help, ~/.claude hint, and named removal headers (#7740)
  • 1de9b59 fix(setup): bd setup claude --global manages the section in ~/.claude/CLAUDE.md, not the current directory (#7696)
  • 5a6da89 fix(setup): confine recipes.toml recipe paths to bd setup's directory (#7901)
  • bf4ac0e fix(setup): keep a symlinked .mux on bd setup mux --remove, and name ~/.mux/.mux leftovers (#7762)
  • 026fc95 fix(setup): keep an existing file's mode when bd setup rewrites it (#7763)
  • d877c65 fix(setup): keep bd setup gemini's global section in ~/.gemini/GEMINI.md (#7739)
  • 9893f90 fix(setup): leave a current agents-file beads section untouched (#7693)
  • d335e4e fix(setup): never unlink a symlinked integration dir on --remove (#7806)
  • 6fee099 fix(setup): refuse an unreadable settings.json instead of replacing it (#7796)
  • 9d6fff7 fix(setup): resolve the beads plugin by Claude Code's settings precedence (#7774)
  • 5e2158e fix(setup): route Claude hook-removal lines through the installer output (#7691)
  • ee441fd fix(setup): stop leaving a blank-line hole on --remove (#7692)
  • 94c9b71 fix(setup): treat the beads plugin's hooks as user-level only when user settings enable it (#7741)
  • 8f980cb fix(setup): word bd setup mux --global's section for user-level ~/.mux/AGENTS.md (#7749)
  • 652c29b fix(show): disclose dependency edges the listing cannot represent (be-lpi) (#6352)
  • 786ed8a fix(show): exit 1 when bd show --as-of reads no issue (#7687)
  • 3f9561d fix(show): preserve last-touched under --readonly (#5786)
  • 98ab920 fix(show): render Created/Started/Updated in local timezone (#5980)
  • 5ac483b fix(show): support bd show --watch under --proxied-server (#6933)
  • 90f8e42 fix(smoke): clear the version list before child dispatch (#6398)
  • c4b1cb6 fix(sql): classify bd sql statements with the SQL parser; never drop result sets (#6932)
  • caae78a fix(sql): classify set-operation exports as writes (#7033) (#7042)
  • 0275ae7 fix(sql): refuse a read that calls a Dolt function that may write under --readonly (#7957)
  • bdd16d6 fix(sqlbuild): bind time bounds as their UTC instant (#7655)
  • dfdedf5 fix(status): disclose the counted rows bd list will not show (#5763)
  • 2cae0c1 fix(storage): a parent-child edge propagates only the parent's exogenous blockedness (#6506) (#6602)
  • 9c5f897 fix(storage): carry closed_by_session through the domain/UOW writer (#4662) (follow-up to #4798) (#7602)
  • 3ba08db fix(storage): cascade wisp aux rows in the shared wisp delete path (#6487) (#6627)
  • 4213c22 fix(storage): cascade wisp deletes into wisp_dependencies (#6563)
  • 5e587ef fix(storage): commit the is_blocked flip with dependency and wisp writes (#6647) (#7929)
  • 0eb4687 fix(storage): count a wisp's comments in wisp_comments (#5565) (#6709)
  • 194b894 fix(storage): generated ids are free in both planes and within a create batch (#8057)
  • 66aa73b fix(storage): include custom active-category statuses in bd ready (#5831) (#5918)
  • 9144ac0 fix(storage): keep a row's history participation across a wisp round trip (#7742)
  • e1ad3a9 fix(storage): list and count dependency edges once across wisp plane states (#7776)
  • cda2407 fix(storage): recheck blocked state after commit on the proxied (uow) path and the remaining store routes (#6942)
  • f3c4739 fix(storage): refuse graph_mode workspaces on library opens (#7721)
  • c1b35ae fix(storage): serialize guarded deletes against each other on a Dolt sql-server (#7244)
  • 61ec851 fix(storage): stop recommending an inert config.yaml key for a missing prefix (#5936)
  • 2f7699c fix(storage): stop the close-gate walk reading a closed or pinned parent's stale bit (#7924)
  • 710f712 fix(storage): verify Compact's rebuilt chain before swapping main (supersedes #7296) (#8011)
  • 9b215a4 fix(storage): widen schema-init timeout headroom for migrating-store-open tests (#5999)
  • 61ec1d1 fix(sync): distinguish SSH dial timeout from auth failure (#6677)
  • d213417 fix(sync): keep the pull/push step when explaining an SSH dial timeout (bd-fzes0) (#7620)
  • 3a068db fix(telemetry): keep the raw command line off the OTel resource (#8222)
  • 2edea9c fix(telemetry): key the bd.storage.* metrics by db.operation alone (#8223)
  • 473aa09 fix(telemetry): pool gauges follow open stores, console exporters to stderr, fractional ms (#8224)
  • 298e08c fix(test): adapt watermark-throttle test to #7044's single pre-sync read (#7219)
  • ec60748 fix(test): keep fixture commits from starting the auto maintenance that prunes a new worktree (#7314)
  • cd2edad fix(test): point tx-minting guard at commitWriteTx (#6833)
  • 4eeb41f fix(test): reap dolt sql-servers leaked by killed test runs, and fail the suite that leaks (#6441)
  • 2ac4e07 fix(test): recover when a Dolt test server dies mid-suite (#6756)
  • f35aef5 fix(test): remove the bd binary the cmd/bd integration tests build (#8019)
  • aaeaedc fix(test): retry contended migration lock when re-running schema init on the shared test DB (#7235)
  • d284431 fix(tests): prlintmake runs go.mod's toolchain from the Bazel Go SDK (#7138)
  • 8d6671b fix(testutil): stop masking build failures as a misleading chmod ENOENT error (#6715)
  • 1cf193b fix(testutil): sweep Dolt test containers whose owner process exited (#7028)
  • a1ac9f4 fix(testutil): wait for database visibility in SetupSharedTestDB (#5788)
  • eb1689c fix(timeparsing): add min minutes unit to compact duration parser (#6609) (#6629)
  • 8446d09 fix(tracker): honor --create-only in push --dry-run preview (#6337) (#6712)
  • 22e9178 fix(tracker): hydrate pre-linked issues from overlap-only bulk rows (supersedes #6807) (#8005)
  • 14add81 fix(tracker): skip re-adding dependency edges that already exist on pull (#6734)
  • 2bb5337 fix(types): one source of truth for issue types across bd types and create (#6934)
  • 602f4bf fix(uimd): render bd show DESCRIPTION with terminal's actual background (#5776)
  • a780517 fix(uow): rediscover proxy endpoints after idle exit (supersedes #7998) (#8072)
  • 38d41f5 fix(uow): refuse a database whose schema is ahead of the binary on proxied and bd serve opens (supersedes #8121) (#8388)
  • b187065 fix(uow): render the shaped gate body on the proxied read-through (bd-mfsky) (#7610)
  • 7423018 fix(uow): stop outage backoff from spinning at CPU rate after the outage window (#7196)
  • 45a116d fix(update): fence unforced --notes overwrites behind --force across all surfaces (#5946)
  • ab88b20 fix(utils): refuse a bare jq/JS sentinel (null, undefined, empty) as an issue ID (#6215)
  • 8951ca5 fix(version): refuse Go pseudo-version predecessors in pre-0.56 recovery (#7000)
  • 7f8046b fix(versioncontrolops): drain auto-resolve CALLs on the CLI-repair session (#7960)
  • cbfdafc fix(versioncontrolops): fail closed on unparseable BackupRestore URLs (#7988)
  • 8f19545 fix(winget): require PortableCommandAlias for GasTownHall.Beads (#5134)
  • bf7c19c fix(wisp): bd mol wisp gc --age 0s no longer misses a just-created wisp (#7246)
  • bf949af fix(workapi): settings HTTP surface refuses YamlOnlyKey writes, closing a secret-leak path (#7567)
  • e24940e fix(workspacegate): strict --readonly never creates workspace gate files (#7672)
  • e766da5 fix(worktree): preserve CRLF gitignore appends (#5677)
  • 2ef3bd8 fix: 36 raw dolt.New(&Config{Path}) test sites in cmd/bd silently skip (#6679)
  • 8d2b415 fix: commit server-mode config and memory writes (GH#4078, carries #4383) (follow-up to #7299) (#7608)
  • 1cbac71 fix: dep add stores an unresolved target as a bare external ref, then readers drop it (#6571)
  • 93cfee9 fix: honor changed directory when running prime (#6550)
  • edb86e3 fix: honor dolt.auto-commit in proxied server mode (#6499)
  • ced3dfe fix: isolate 2 doctor role tests from global git beads.role (#6247)
  • 4b2852c fix: macOS main job — /private/var symlink in test repo pin; bash 3.2-safe CI scripts (#7165)
  • 02a416c fix: make release-version checks shell-free (#5614)
  • e0840ad fix: raise Differential Regression CI timeout budget (#6271)

Others

  • 33bed58 Accept uutils coreutils timeout in generated hooks, and check the shims against real implementations (#6561)
  • ea89b16 Align proxied-local-smoke Dolt CLI pin with measured 2.2.0 (refs be-egcj2.3) (#6002)
  • fa3edf7 BDP bead-graph plan and W-arch design docs (P-1 rulings complete; docs-only) (#6154)
  • 730fb98 Beads #6648: report partial batch-close failure (#6740)
  • a8a6c67 Beads #6735: prevent duplicate GitLab sync on self-hosted URLs (#6736)
  • 70f9e2f Beads 1.2 remediation: migration-consent gate — bd never migrates an existing database without explicit consent (#5764)
  • 0950db0 Fix ResolveServerMode ambient port-var handling and the KillStaleServers regression it introduced (#5934)
  • 1336d16 Fix: bd bootstrap can also silently create an empty server-mode database (#6503)
  • a4bf13f Fix: test suites fail closed instead of open on the ambient Dolt port when no test container is started (be-napos) (#5885)
  • da62633 Four-leg no-op conformance case for #5898: duplicate dep add and absent dep remove mint no version on any leg (#6650)
  • b3d17ca Merge release/1.3.0 into main (post-tag forward-port)
  • fd05690 Newsletter dropped every commit made before the hour it ran (#6491)
  • 2bb1e20 Phase 1: additive schema + migration slot claim for versioned beads (#6134) (#6304)
  • 5c9c02a Phase 3 (R20): epoch-transition enforcement + minted-address CAS - gastownhall/beads#6136 (#6664)
  • ab9adc7 Refuse reserved words and fuzzy id matches on bd comment writes (#5393)
  • 74495b9 [release/1.4.0] chore(release): date v1.4.0-rc.1 for 2026-11-13 and correct its notes (#8423)
  • fa7cad3 [release/1.4.0] chore(release): prepare v1.4.0-rc.1 (#8411)
  • 9c6f6e1 bd versions + a config switch for versioned history — the minimum cut that makes versioned beads usable (#6138) (#6661)
  • 6daa062 build(bazel): integration-tag lane (--config=integration) matching main.yml (#6916)
  • 57ef364 build(bazel): side-by-side Bazel scaffold + policy tests (#6798)
  • bc0cc87 build(deps): Dolt 2.5.1 engine and pins + go-deps group, with compatibility fixes (#7646)
  • adfa73a build(deps): Dolt 2.6.0 engine and pins, Go 1.27.3 (#7829)
  • 8d7d7fe build(rbe): adopt gascity's toolchain-only worker-env pin; check the copy nightly (#7346)
  • ce58239 build(rbe): re-pin worker-env to gascity's go1.26.9 worker host (#7411)
  • d652def build(rbe): re-pin worker-env to the updated Blacksmith ubuntu-24.04 image (#7338)
  • 085d056 build(rbe): sync worker-env pin with gascity main (#7746)
  • 7acdc0e build(rbe): sync worker-env pin with gascity main (#7875)
  • daccf61 build(rbe): sync worker-env pin with gascity main (#8421)
  • 64e585e build(rbe): sync worker-env pin with gascity main (Go 1.26.9 re-pin, gastownhall/gascity#7387) (#7419)
  • 50110a8 chore(beads-mcp): ruff target-version py311 (#8220)
  • 819ebd5 chore(deps): bump DeterminateSystems/determinate-nix-action (#6042)
  • eeb9ee3 chore(deps): bump the beads-mcp-python group across 1 directory with 4 updates (#5929)
  • 566c84b chore(deps): bump the beads-mcp-python group across 1 directory with 5 updates (#6495)
  • 0dc36ae chore(deps): bump the go-deps group across 1 directory with 20 updates (#6494)
  • ac3416c chore(git): resolve CHANGELOG.md add/add conflicts with an opt-in merge driver (#8153)
  • d00875e chore(nix): regenerate vendorHash for the merged module graph
  • 02f3349 chore(release): forward-port v1.3.1 and v1.3.2 to main (supersedes #7050, #7810) (#7827)
  • 214853a chore(release): forward-port v1.3.3 to main (#8114)
  • e969481 chore(release): forward-port v1.3.4 to main (#8128)
  • f60de63 ci(bazel): 8 vCPU client for bazel-test, 4 vCPU for the other Bazel lanes (#7422)
  • 66075be ci(bazel): Bazel 9.3.0 (prerequisite for the remote repo contents cache) (#7439)
  • 6ebaacb ci(bazel): Bazel 9.3.1 (#8034)
  • fc4d7d3 ci(bazel): PR-gate parity lanes (docker, pure-Go, js/wasm) + bd artifact (#6887)
  • 068cdd6 ci(bazel): a fork repository's own CI runs in mode local, never rbe-cache (#7821)
  • 57e86a2 ci(bazel): add CI analytics extraction to all lanes (S3) (#7356)
  • ee10ffe ci(bazel): add a shrink-only runtime skip census to every Dolt-tier lane (#8272)
  • eb20436 ci(bazel): add advisory dolt-race shadow lane (item 5 phase 1) (#7464)
  • 6da2a43 ci(bazel): advisory Bazel workflow + go test/Bazel equivalence check (#6881)
  • f743cb5 ci(bazel): cache Bazelisk and the Bazel binary, checked against their pins (#7816)
  • 72534f8 ci(bazel): check the Dolt server fingerprint on the dolt-server lane; retire pr.yml's fingerprint job (#7328)
  • 68d8cf9 ci(bazel): cover fork and Dependabot PRs with the Bazel lanes (BAZEL_COVERS_FORKS=true) (#7315)
  • 5e73670 ci(bazel): cross-compile every release target with Bazel, retire the go build job (#7332)
  • b162e0a ci(bazel): cut embedded/test lane long shards (served template, bulk seed, rebalance) (#7416)
  • 143c418 ci(bazel): cut per-lane fixed cost — LLVM .tar.zst slice, release cross-compile lane, no protoc build (#7379)
  • 9cb22b7 ci(bazel): decide RBE mode once (fixes Dependabot runs); add advisory integration lane (#6930)
  • 873162d ci(bazel): dolt-int gates server-storage + cmd-dolt in mode remote (item 5 A2) (#7535)
  • 85464f5 ci(bazel): dolt-race gates the dolt-server and proxied tiers in mode remote (item 5 A1b) (#7514)
  • 3d76cbd ci(bazel): dolt-server lane on remote execution (replaces the docker lane) (#6898)
  • ec72c8c ci(bazel): drop //cmd/bd:bd_test from the integration lane where the cmd/bd Dolt-server tier is required (#7230)
  • 72a3d80 ci(bazel): embedded storage tier to 40 shards; split its two slowest tests (#7440)
  • 1137aeb ci(bazel): embedded-Dolt tier 20/5 → 50/15 duration-balanced Bazel shards (F1) (#7156)
  • 6dbd9db ci(bazel): embedded-Dolt tier under Bazel, shard-for-shard with PR Risk (#6896)
  • a945eca ci(bazel): fetch pinned Ubuntu debs in parallel from a gascity mirror first (#7434)
  • f0f8879 ci(bazel): fork PRs execute on rbe-west's fork pool (fork-ro/fork-rw), cache fallback (#7136)
  • 291987e ci(bazel): fork PRs use rbe-west's anonymous read-only cache (#7065)
  • 4a92834 ci(bazel): fork-own CI's rbe job on GitHub-hosted runners; pin the owner by id (#8023)
  • b4831e7 ci(bazel): go_test_offline runs on the fork tier, where actions are already offline (#7359)
  • 1531a31 ci(bazel): halve the embedded cmd tier's cost (seeded bd init schema, no race exit sleep, concurrency-aware packing) (#7437)
  • cb0dcbe ci(bazel): hermetic LLVM C toolchain and pinned rbe_worker exec platform (#7325)
  • c1ccb72 ci(bazel): mode-cache readers use the remote repo contents cache via rbe-cache (#7476)
  • 73f64fd ci(bazel): no run reads rbe-cache from a GitHub-hosted runner (mc-endp5) (#7830)
  • a4509de ci(bazel): nogo replaces go vet and golangci-lint (ga-96smfk.18) (#7341)
  • 7c47c3c ci(bazel): pin httpclient_served_test's slow tests to shards (16 -> 26 shards) (#7443)
  • 5a5b7cf ci(bazel): pin the slowest cmd/bd Dolt-server tests to their own shards (#7413)
  • 88d9b64 ci(bazel): pre-warm rbe-west's OSS worker pool when a same-repo PR's Bazel lanes start (#7159)
  • 6e9a155 ci(bazel): proxied-server tier 15 → 30 duration-balanced shards; un-hide 12 proxied tests (F2) (#7129)
  • c4c66d4 ci(bazel): rebalance the proxied-server tier on rbe-west measurements (30 -> 44 shards) (#7418)
  • f53010a ci(bazel): remote repo contents cache: main-push seed, lane readers, nightly verify (#7453)
  • a3b6dc9 ci(bazel): remote-execution Bazel lanes for allowlisted fork authors (advisory) (#6994)
  • 7a21446 ci(bazel): require the integration lane on same-repo PRs (#7069)
  • 4f924fc ci(bazel): retire PR Risk's legacy Dolt tiers, pr.yml's legacy Go jobs and the D2 coverage flags (#7353)
  • 9d13485 ci(bazel): retire main.yml's Linux jobs, nightly's go test jobs and ci-measurements (#7354)
  • ce66117 ci(bazel): retire the docker A/B variants and pr.yml's container jobs (#7340)
  • 3b0aa1b ci(bazel): run every BEADS_TEST_PROXIED_SERVER-gated cmd/bd test in the proxied lane (+ guard) (#7468)
  • 84390b0 ci(bazel): run every Windows/macOS job on Blacksmith; retire the Linux preflight leg and the cross-compiled Windows pair (#7355)
  • e2b78f7 ci(bazel): run integration on fork PRs via the read-only cache; retry Go module fetches (#7120)
  • b1fe68e ci(bazel): run pr.yml's repository guards as Bazel tests (#7329)
  • 8761d2c ci(bazel): run the conformance e2e tier under Bazel; retire conformance.yml and the docs-mintlify docsync job (#7321)
  • 9a91f06 ci(bazel): run the differential regression suite under Bazel; retire regression.yml (#7324)
  • 7e0adfd ci(bazel): run the historical-upgrade corpus under Bazel; retire migration-test.yml (#7330)
  • 77ab980 ci(bazel): run the hook-timeout-backends check under Bazel; test-nix stops running tests (#7357)
  • c292964 ci(bazel): run the managed-local proxied lifecycle lane under Bazel; retire proxied-local-smoke.yml (#7326)
  • 0500fc6 ci(bazel): run the scripts and source-walking tests remotely; retire their go test legs (#7320)
  • bb9b9e5 ci(bazel): run the upgrade smoke tests under Bazel; retire cross-version-smoke.yml (#7331)
  • 7896abb ci(bazel): scope the proxied lane's shared-server projects to their own database (44 -> 34 shards) (#7436)
  • a13272b ci(bazel): serve gazelle's go_repository tools from the repository cache (#7417)
  • e7138e9 ci(bazel): server-Dolt storage and proxied tiers on remote execution (#6940)
  • d908234 ci(bazel): split //scripts:scripts_test by what it reads; partition //:repo_files (#7414)
  • c218801 ci(bazel): split embedded conformance core into two targets (#7446)
  • 0d86546 ci(bazel): split the slow embedded cmd tests and run the cmd block as 2x50 shards (#7438)
  • 0c56217 ci(bazel): spread http_served_test over 10 pinned + 4 round-robin shards and shard bd_managed_local_test; fail on a stale shard manifest (#7817)
  • 8c3eb30 ci(bazel): upload per-lane Bazel profiles as 7-day artifacts (flame graphs) (#8157)
  • 59dcd83 ci(bazel): use client-id for the rbe-prewarm app token; drop local plan paths (#7164)
  • fa3d50e ci(bazel): zstd for the anonymous fork cache when it advertises it (rbe-west E4) (#7202)
  • 8988340 ci(embedded): run every BEADS_TEST_EMBEDDED_DOLT-gated cmd/bd test in the embedded lane (#7708)
  • fa53c7e ci(main): bound the Test matrix's per-package deadline (wy-5b5fbl)
  • 9f60d71 ci(main): push to main runs the Linux test tiers under Bazel only (#7316)
  • d26da8d ci(merge-queue): run a fast build+unit set on merge groups; Dolt tiers, Windows/macOS and Nix run on the PR and after the merge (#7818)
  • 233d151 ci(pr): cut the Windows PR preflight leg's fixed costs (slice W) (#7378)
  • 4493eb8 ci(pr): run same-repo macOS preflight/doc-freshness legs on Blacksmith macOS (#7231)
  • a239f63 ci(pr): run the scripts package on the PR's macOS leg (#7833)
  • 630eae9 ci(pr): share restored GOCACHE with the native init credential step (#7227)
  • b400268 ci(pr): windows-make-shell takes its Make toolchains from the image and main-saved caches, not the network (#7820)
  • a1948a8 ci(rbe): accept gascity's previous worker-env pin inside its grace window (ga-96smfk.90) (#7825)
  • b3cdbf9 ci(rbe): auto-PR a worker-env pin sync when gascity main re-pins (mc-gv9fk) (#7455)
  • 886ebb3 ci(rbe): fail remote runs fast on a stale worker-env pin; nightly opens an issue (#7373)
  • 34cd926 ci(rbe): land the worker-env sync PR via review, not an auto-merge it can't arm (#7761)
  • b5881d7 ci(rbe): open the worker-env pin-sync PR on gascity's re-pin dispatch and auto-merge it, bot/branch/files verified (#7819)
  • 2d395d3 ci(release): never restore Actions caches into release builds (#6966)
  • e249244 ci(release/1.4.0): stop doc-freshness markers expiring on the release line
  • b8a9545 ci(setup-bazel): 4 GB client heap on every runner (R4) (#7174)
  • 38c0f24 ci: F5 S2 Variant A — nogo ownership for the integration configuration group (#7486)
  • d530cdd ci: add advisory cyclomatic complexity reporting (#6081)
  • 403e27c ci: add needs-triage inbox labeling (mirrors gastownhall/gascity) (#6622)
  • 6be9c86 ci: advisory workflows on Blacksmith with restore-only caches, folded matrices, path filters (F7c) (#7147)
  • 90b84ea ci: auto-push Bazel BUILD sync fixes to PRs; harden docs autofix (#6907)
  • 516e0b4 ci: autofix pushes with the gastownhall-autofix App token (no more approve-and-run) (#7215)
  • 785f107 ci: bigger runners for the slowest cached-run jobs (MCP gate 8 vCPU -n16, Bazel test 4 vCPU) (#7381)
  • c1fc671 ci: cross-build Windows test binaries on Linux (advisory side-by-side), drop PR macOS full suite (F4) (#7135)
  • 9ce9918 ci: cross-compile release targets on PRs (#5684)
  • c39430e ci: disable Ryuk reaper on Dolt testcontainer steps to fix parallel-binary flake (#5770)
  • fe6bd63 ci: fix red nightly (Bazel-skip allowlist, credential helper init); rerun-safe Bazel artifacts (#7096)
  • e1b2e79 ci: gate PRs on the Bazel lanes, alongside the legacy jobs (D1) (#6941)
  • 9116068 ci: give PR Risk's gate a distinct check name (#6939)
  • 76d5bf6 ci: harden F5 S1 nogo ownership checks (follow-up to #7479) (#7482)
  • e72cd8b ci: merge-queue readiness for the required gates; cache test results (fresh nightly) (#7264)
  • aaae7e6 ci: package gates start after rbe, MCP pytest -n 8, gate jobs on Blacksmith (F3) (#7126)
  • bc19f6e ci: parallel PR Lint matrix with pinned golangci-lint, fold duplicate Lint, split scripts-go-checks (F5) (#7127)
  • b1a0690 ci: pin four hash-placed proxied tests off overloaded legacy shards 5 and 3 (#7172)
  • c410795 ci: pin the Actions allow-list for the selected-and-SHA-pinned policy (R3) (#7175)
  • 6e36c3f ci: raise proxied Dolt cmd test job timeout, add step timeout, refresh shard manifest (#6689)
  • 5f98170 ci: require the Linux-cross-built Windows test jobs (WINDOWS_PREBUILT_REQUIRED=true) (#7161)
  • 15d74c0 ci: require the cmd/bd Dolt-server tier (BAZEL_CMD_DOLT_REQUIRED=true) (#7226)
  • 46e670a ci: retire PR Risk's legacy embedded tier where the gated Bazel lane runs it (D2 step 1) (#7071)
  • 3789dde ci: retire PR Risk's legacy proxied and server-Dolt tiers where the gated Bazel lanes run them (D2 step 2) (#7094)
  • 0588af2 ci: retire pr.yml's legacy PR Core, build, pure-Go, domain+uow and contract jobs where the gated Bazel lanes run them (D2 step 3) (#7097)
  • 9c8be5e ci: retry the module fetch in pr-policy-wrapper, not the build (#5901)
  • fac9a1e ci: same-repo Linux PR jobs on Blacksmith; fold tiny checks and cross-compile legs (F7a) (#7139)
  • 84ce244 ci: same-repo Linux/Windows PR jobs on Blacksmith with main-seeded warm build caches (F7b) (#7155)
  • 3c65c99 ci: trigger pull_request CI on hotfix/** branches, not just release/** (#7148) (#7198)
  • bc34f1d ci: upgrade workflows also run on schema-migration changes (#7150)
  • 3f1c603 ci: warn-only shard-balance budget for bazel-server-storage (#7339)
  • 63d8cc2 cmd/bd: bd label rename (stacked on #6007) (#6009)
  • b42e691 community-tools: add the aweb mail delegate for bd mail (#6300)
  • 4f9174e docs(agents): bazel test is authoritative; agents never run go test (#7695)
  • 0773e63 docs(agents): contributor-only agent instructions and documented-issue intake (#7223)
  • 368b225 docs(bazel): make bazel test the primary build and test path (ga-96smfk.23) (#7348)
  • 70b44da docs(ci): finish the retired-shard-job comment sweep after #7478 (wy-wqq7c1) (#7456)
  • 08fc8ab docs(ci): update shared cloud routing shard rationale (#6432)
  • 90a687f docs(cli): say which direction --reverse reverses from (#5714)
  • 16873dd docs(community-tools): add beads-pm-kit (#6239)
  • c5e49a3 docs(config): document audit.enabled in configuration reference (#5940)
  • d4ed0c7 docs(config): document claim.pools in the configuration reference (#6607) (#6726)
  • 7833e4e docs(config): state no-git-ops scope; document dolt.local-only (GH#3463) (#7908)
  • 55f96b3 docs(contributing): recommend issues when they add context instead of requiring one per PR (#7323)
  • 75d9dab docs(cursor): re-review docs/integrations/cursor.md against cmd/bd/setup/cursor.go (#7333)
  • 1c14b4c docs(dep): say what --no-cycle-check skips on a single-edge add (#6688)
  • 5912d28 docs(dolt): correct the pre-2.3.3 symptom and scope descending-index wording (#7646 follow-ups) (#7807)
  • b7f210c docs(dolt): distinguish SQL persistence from Dolt history for the shared server (#8064)
  • 062fe1e docs(dolt): show the positional remote in push/pull usage and help (#7937)
  • 800d43e docs(engdocs): re-review ERROR_HANDLING.md against cmd/bd and refresh its marker (#7267)
  • 5ac1941 docs(engdocs): re-review SERVE_RUNBOOK.md and refresh its marker (#8326)
  • 6f544dd docs(engdocs): remove the BDP bead-graph plan and design docs (#8228)
  • 8ae1a2b docs(ide-setup): re-review against cmd/bd/setup and refresh its marker (#7268)
  • 11b5d32 docs(proxied): name the Close3/Close4 legacy pins and fix the Close3 doc comment (#7173 follow-up) (#7382)
  • 54dd4da docs(recovery): init-safety re-clone playbook covers damaged-store and fresh-clone gotchas (#6431)
  • 2298c65 docs(recovery): re-review init-safety playbooks; refresh the 90-day marker (#6411)
  • 14fc79a docs(release-gates): annotate be-tqwx gate record with be-mv0ww correction note (be-mv0ww.2) (#5890)
  • d54defc docs(schema): document the provenance invariant behind execMigrationBody (#6413)
  • 7b9209d docs(security): send vulnerability reports to GitHub private reporting (#8374)
  • 01eb7b8 docs(show): say that --json omits comments entirely without --include-comments (#7132)
  • da89d21 docs(testutil): document migration-0032 hang and Ryuk-disabled container-leak caveats (#6001)
  • 384001a docs(upgrading): adopt a migrated remote without relying on bd bootstrap (#7280)
  • c33d30a docs(upgrading): key the shared-server read failure to schema v53, not release 1.2.0 (#7310)
  • b1bee12 docs(upgrading): reads fail too between upgrading clients and migrating a shared server (#7284)
  • 6c1848a feat(backend/http): per-open credential is the only credential (S6f) (#7469)
  • 8dbbe78 feat(backend/http): public HTTP backend door, OSS registration, and bd connect (S6) (#7288)
  • b08c341 fix(beads,storage): refuse an unsupported legacy config.json before writing (#7798)
  • 6442502 fix(beads-mcp): bump joserfc to 1.7.7/1.8.0 for GHSA-jpxq-7h8p-2q76 and GHSA-9pg5-8c7x-5hfx (#8115)
  • fb09d9f fix(beads-mcp): bump pyjwt to 2.15.1 and urllib3 to 2.8.0 for security advisories (#7466)
  • 12c20a6 fix(ci,mcp): uv 0.13.5 for eMudhra intermediates; fastmcp 4.1.2 and opentelemetry-api 1.45.1 advisories (#7814)
  • ef988df fix(ci,tests): un-hide TestEmbedded* tests, fence cmd/bd tests from ancestor .beads, cut #7051 race long poles, fix main lint (#7128)
  • 0a163ca fix(ci-policy): close M19/M21 scanner gaps from #7491 review (#7492)
  • 17127ee fix(ci-policy): close review leftovers from #7485/#7486 (#7491)
  • 8e2fc78 fix(cli,configfile,dolt): refuse foreign legacy workspaces before rewriting or opening them (#7838)
  • 4acde6b fix(cli,dolt): quote store-read IDs and recipe values in pasted remedies; print the cold-start re-add statement runnably (#7868)
  • 43f4137 fix(cli,remedy): quote store-read IDs in the remaining pasted hints and drop backtick-wrapped remedies, with census guards (#7903)
  • 0b1e965 fix(cmd/bd): classify delete's pre-flight not-found as precondition_failed (#7256)
  • 1b7bf9b fix(cmd/bd): guarded close/update/assign that lose to a delete at pre-flight report precondition_failed (#7465)
  • 11c23da fix(cmd/bd): only a missing data dir skips the identity check (bd-wlygc) (#7615)
  • d82c82d fix(cmd/bd): purge/prune reject negative --older-than overflow, carry --limit in confirm hint (#7540)
  • cb5ae77 fix(cmd/bd): run workspace identity check before applying schema migrations (#6674)
  • e88d9c0 fix(create,migrate-personal): print a remedy value only when every shell passes it on (#7799)
  • ce512c3 fix(dep tree): match --format mermaid case-insensitively (#6646)
  • 29bd4ee fix(doctor,doltserver): escape SHOW DATABASES identifiers at raw-interpolation sites (#6434) (#6638)
  • df3330c fix(doctor,tips): resolve the beads plugin as bd setup claude --check does (#7802)
  • f386202 fix(hooks,doctor): refuse symlinked hooks dirs and confine doctor's destructive database paths (supersedes #8070) (#8077)
  • b31136e fix(init,bootstrap): put init --remote clones and bootstrap writes on the workspace's server (#7900)
  • 249d7cd fix(init,create): resolve nested init ports, clone through local servers, name target host in create remedy (#7892)
  • cbc5025 fix(migrate-personal): accurate, cleanly printed refusals and a server-mode test leg (#7770)
  • 9826fed fix(migrate-personal): open the planning store from its own metadata (#7751)
  • 3f90ef6 fix(migrate-personal): truthful, non-looping refusal of a shared root's database from a rig (#7801)
  • 882467e fix(migrate-personal,dolt): refuse half-moves and make dry-run delete match the real one (#7983)
  • 49d5693 fix(npm-package): postinstall redirect download no longer races an unlink against its own re-download (supersedes #7791) (#8098)
  • fb912f2 fix(oracle-a): write scoreboard failure detail per run, not to shared /tmp (#7690)
  • 16871ee fix(schema,docs): make the shared data-behind consent step runnable (#6692)
  • a4c47cc fix(schema,uow): route the proxied data-behind open to the #6575 stop (port of #6695 to main) (#7481)
  • cad7e17 fix(setup/claude): keep settings.json's trailing newline and skip no-op rewrites (#5944)
  • 8c331f1 fix(storage/db): read each id once when batching bulk IN-list readers (#7785)
  • c0d8da4 fix(storage/uow): retry transient ping failures during openDB bootstrap (#6003)
  • d14aa04 fix(versioned-history): pre-enable scan checks legacy proto issues (#7775)
  • a625ea7 fix(versioned-history): pre-enable scan names only participating rows (#7750)
  • b17005a fix(wisp gc): apply the --age test to cascade children (follow-up to #5219) (#7599)
  • c4305ff kv: add 'bd kv list --prefix' — SQL-side key-prefix filter for scoped reads (wy-1rrwt8) (#6380)
  • a077940 migration-test: port the historical-Dolt upgrade corpus to darwin/arm64 (#6072)
  • 0c87da2 perf(bazel): ask rbe-cache for zstd in the committed fork-cache config (#8110)
  • 5126de8 perf(bd): no git subprocesses on read-only commands (in-process repo discovery, lazy actor, backup probe) (#7400)
  • a4cc7ee perf(dolt): pin MaxAllowedPacket in the server DSN to drop a per-connection round trip (#5273 item 4) (#5316)
  • babf8d7 perf(dolt): sweep the circuit-breaker dir once per process and age out closed files (#7593)
  • 9c4b3d8 perf(externaldeps): annotate a page's blocking state in one pass, not one IsBlocked per id (#7556)
  • b303d49 perf(http): answer a command's repeated reads from one response; bd show --json makes 1 request (port of bd-enterprise e626072b8) (#7588)
  • 2563f02 perf(httpclient): remember the server's external-dependency policy across processes (#7700)
  • 5e951a2 perf(issueops): batch create/import without per-row round trips; on-demand graph checks (#7205)
  • f7ecd0f perf(issueops): batched is_blocked mark/unmark decide membership through the batch-scoped should-be-blocked union (#6291)
  • ba12ffa perf(issueops): indexed dep-add cycle/hierarchy walks; pin blocked-state lookup plans; split waits-for spawner checks (#7224)
  • 2ef4df3 perf(issueops): settle just-closed rows without the blocked-state union statements (#7897)
  • 169c5fc perf(list): read only the listed issues' dependency edges (#7591)
  • ced977b perf(metrics): bound the all-fresh-backlog prune walk with an incremental heap (#6515)
  • 3c30a28 perf(ready): answer the page and its total in one pass (#6731)
  • 1764637 perf(ready): recurse the --parent descendant walk off indexed base tables (#6130)
  • d097b6c perf(ready): skip the countReadyWork request when bd ready --json prints no total (#7699)
  • fdec618 perf(schema): drop the per-open INFORMATION_SCHEMA.TABLES probes (builds on #7409) (#7596)
  • 93ecb95 perf(schema): probe columns with SHOW COLUMNS in the updated_at migration guard (#8080)
  • de01b0f perf(schema): probe the column sentinel with SHOW COLUMNS, behind a carrier-table read (#7592)
  • d28f56c perf(startup): initialize packages on four Ps, not every CPU (#7701)
  • 2db739e perf(storage): SearchIssueSummaries narrow-projection foundation (be-nu4.3) (#3458)
  • f56632a perf(storage): stop burning two wasted MySQL sessions per bd invocation (wy-s8ytnw) (#6122)
  • 91aeeb0 perf(storage/db): batch fetchIssuesByIDs, GetBlockingInfo and loadStatusByID at 200 ids; delete tolerates only a missing wisps table (#6444)
  • 1e32543 perf(versioned-history): defer the switch's row read to the first write (#7743)
  • 9c6193f refactor(git): resolve hooks paths in an explicit read-only context (#6436)
  • e21eaf0 refactor(import): retire the same-chunk regular<->wisp deferral (wy-y52syc) (#6159)
  • 5ecc9b0 refactor(init): retire the unused global-ignore writer (#6452)
  • 7ccb961 refactor(proxy): one capability registry with a reason on every refusal (proxied-parity S2) (#6582)
  • ba2f0af refactor(worktree): route addToGitignore through gitignore.AppendLines (post-merge #5677) (#7006)
  • ccbdefe refactor: remove the graph-preview workspace fence (#8230)
  • c3a97e1 show/list: render a derived GATED decoration when an open gate holds the bead (#6606)
  • ce70b26 storage: add participation_generation (migration 0070) and the versioned-history write fence (#6943)
  • 225ed7f test(backend/http/corpus): served MC command corpus against the reference server profile (S23) (#7483)
  • ae1a493 test(bazel): fully green //..., tag taxonomy + docker lane, sharding, test sandbox ceiling (#6871)
  • 4f2f8f2 test(bazel): hermetic test env + inject bd binary into subprocess tests (#6843)
  • e0a3267 test(bazel): pin dolt-int's moved cmd-dolt args/env + omitted-status BEP case (#7536)
  • 55aac47 test(bazel): pin the item-5 one-wave rule for dolt-race/dolt-int budgets (#7545)
  • d855ac6 test(bazel): pin vet policy to module toolchain (#7668)
  • 469462d test(bazel): run every Bazel test against a hermetic, pinned dolt CLI (#6853)
  • f663754 test(bazel): runfiles helpers + declared inputs for scan-guard tests (#6828)
  • 4e27523 test(bazel): shard http_served_test and corpus_served_test (embedded lane critical path) (#7537)
  • d33c914 test(bd): pin defer/undefer exit codes, comment attribution and the template guard across write verbs (#8275)
  • 8977ea1 test(bd): pin the reworded dolt start help in the command-tree golden (#7904)
  • 9eaa4c1 test(ci): make doc-freshness selection fail closed (#5729)
  • 056f47a test(ci): surface shard-script stderr in lane guards; assert corrupt-metadata refusals (#7744)
  • f142cc2 test(cli): before-parity pins for --format json, ordinary --if-revision, and version/config/history/as-of shapes (P7, P8, P10) (#7676)
  • cd25077 test(cli): close mc-zndi7.76's --if-revision single-winner test gaps (#7233)
  • 150a58a test(cli): scope repository discovery caches to fixtures (#6320)
  • 3ce0423 test(cmd/bd): bound the init cost of bd's HTTP packages (#8263)
  • cdda0df test(cmd/bd): drop dead unsupported-storage test, CWD-independent bd fallback build, stop BEADS_DIR leaking between in-process runs (#7171)
  • 8f960b1 test(cmd/bd): pin count and omitted flag on the embedded wisp include view (#7698)
  • 6db4666 test(cmd/bd): pin mixed-case dep tree --format Mermaid through the CLI (#7697)
  • 36f81ba test(cmd/bd): pin the command tree and representative --help output (#7675)
  • 3a5ade3 test(cmd/bd): pin workspace discovery refusal text and exit codes (#7677)
  • a8003cf test(cmd/bd): reset repository caches around CWD fixtures (#5747)
  • 7b80f4c test(cmd/bd): route bd -C by the selected project (#7930)
  • fd8da7b test(cmd/bd): scope fresh-workspace BEADS_DIR isolation (#6519)
  • 46aa59c test(cmd/bd): stop tests from mutating the host checkout's .git; guard it in TestMain (wy-qlvlmf) (#7650)
  • 06b3320 test(cmd/bd): stop three tests depending on the developer's actor env (#6560) (#6706)
  • 4524f4a test(cmd/bd): take the flag-reset baseline after a reset, not from live values (#7190) (#7194)
  • be8f78e test(configfile): make port-env fallback tests ambient-blind (be-v4g1j) (#6592)
  • 2c4bedf test(configfile): neutralize ambient BEADS_DOLT_SERVER_PORT in TestEnvVarOverrides fallback subtest (#6221)
  • 6615e8b test(conformance): pin RowVersion advance/hold per mutation kind on every leg (#8271)
  • fafe91b test(conformance): pin a single winner for concurrent guarded deletes on every leg (#8279)
  • b252e82 test(conformance): pin actor attribution for journal, lifecycle events and delete rewrites (#8267)
  • 6ee9893 test(conformance): pin the PLANE of the importer's cross-plane edge assertions (#6218)
  • f5e0c9a test(conformance,httpapi): gate role request fields on contract cases and pin plain /v0 write forwarding (#8265)
  • f57f987 test(cook): condition primitive's dropped leaf still cooks (supersedes #6642) (#8008)
  • a6b175e test(cook): pin gh:* gate fields on a type = "gate" step's companion (GH#3316) (#7760)
  • 1ad5b05 test(corpus): hold each served shape's requests to a wire transcript (#8278)
  • 308fd38 test(corpus): seed served/embedded sides concurrently; size served shards from CI timings (#7538)
  • 8995f24 test(count): pin --include-ephemeral as the plane bit alone, and fix the plane prose (post-merge #6240) (#6998)
  • 4e80488 test(credentials): make remaining credential-command fixtures native-Windows portable (#5748) (#5749)
  • 0ed6d47 test(doctor): assert the nonexistent-path role check's N/A message (#6401)
  • 0d440f8 test(doctor): keep parent close gates out of Child-Parent and --fix-child-parent (follow-up to #5131) (#7607)
  • df63f0b test(doctor): spell Choice 2's sqlite path from the canonical workspace (#8226)
  • 73c9944 test(dolt): document contention-vs-bug verdict for 2 federation tests (#5996)
  • ba1e542 test(dolt): make git-protocol CLI/SQL routing and Pull's silent-staleness failure mode observable (#5955)
  • 5b58d9e test(dolt): pin the complete-read GetMoleculeProgress rollup (supersedes #7055) (#8009)
  • cef9745 test(dolt): pin the failed switch read in RemoveDependency and journal-off transactions (#7773)
  • ff3a6e0 test(dolt): prove bd create rolls back fully on label-event failure (ga-xcq1ph) (#5989)
  • 8cd7ef5 test(dolt): retry branch-local schema init on migration-lock contention (#7145)
  • f3fef33 test(dolt): settleMergeInTx carries cleanly merged tables (GH#7811) (#7944)
  • c0dbe30 test(embeddeddolt): let the dep-rekey marker sit below the ignored-series head
  • 338d643 test(examples): use a Dolt workspace fixture in library-usage TestFindDatabasePath (#7745)
  • f6d9245 test(hooks): bound the long-running bd stub so a killed run cannot leak a spinner (wy-nzeocg) (#6612)
  • ba58464 test(hooks): pin the lock preflight on the commit's index (#7956)
  • 87a78d3 test(http): classify and run every bd command's bd connect front door (G3) (#8287)
  • 84f661e test(httpapi): assert Cache-Control: no-store on every route, not just /healthz (#7748)
  • 073556c test(httpapi): match missing token file with errors.Is, not Unix text (#6628)
  • c2085d0 test(httpapi): pin no-store on the middleware and assert each row's probe refusal (#7764)
  • 42a1024 test(httpapi): pin the default server surface with a golden (#8259)
  • f3d688d test(httpclient): freeze every v0 client request in a per-operation wire golden (#8270)
  • e11ff51 test(httpclient): route every served dial and Listen through one protocol seam (#8268)
  • 3282b97 test(httpclient): run served write roles through bd serve's production Provider arm (#8297)
  • a3c206c test(httpclient,connect): freeze v0 http_target.json bytes and bd connect help (#8260)
  • f300bf7 test(httpclient/encode): registry for cross-package ledger pins + TODO-pin ratchet (#8262)
  • 3bde73a test(import): cover the two lease-proof blind spots (wy-sbgucn)
  • 96c384f test(import): proxied e2e regression for in-batch cross-plane edges (wy-zdfs6r) (#6155)
  • 9d69848 test(import): resume converges as Created+Unchanged, not Created (wy-7fd89p) (#6127)
  • 577c9ac test(init): explicitly enable the contributor wizard fixture (#6476)
  • 61865bb test(init): make gateway credential fixtures portable across native shells (#5715) (#5725)
  • e87acee test(init): port gateway credential fixtures onto shared credentialcmd (#7056)
  • 6dc95bc test(init): start the InitGuard dolt sql-servers through a retrying helper (#8219)
  • a93498c test(kv): pin proxied kv list --prefix fast path and sibling-key e2e (bd-s5k6) (#7204)
  • d0d9aa2 test(list): pin --deps scheduling ordering under --sort closed in the tree (#7703)
  • ce8fe24 test(list): pin bd commands alongside an embedded bd list --watch --parent (#7911)
  • e3efb31 test(oracle-a): always remove the reference worktree on exit (#7689)
  • 2829d22 test(oracle-a): let scenarios that start with init own initialization (#7704)
  • 8fac20a test(oracle-a): normalize per-run revision token and workspace path so main-vs-main is clean (#7680)
  • c86a87b test(oracle-a): pin BEADS_TIP_SEED so human-output scenarios stop flaking (#7707)
  • 448c4b8 test(prime): use native config root in global fixture (#5778)
  • d0cc1b1 test(protocol): pin claim refusals on the single --json batch report (wy-kxgf4) (#4756)
  • 45b62e4 test(protocol): pin §E3 exit 11 with a PTY harness (wy-vh5y8) (#4762)
  • b396366 test(protocol): propagate TZ to the bd subprocess (#6097)
  • 5b44f40 test(proxied): reap the outage bridge before rebinding its TCP port (#7238)
  • f1b5944 test(proxied): run bd sql proxied tests on the shared dolt server (#7166)
  • 9b251db test(proxied): split TestProxiedServerClose into three parents with legacy rollback pins (#7173)
  • 5e3deaa test(proxied): un-skip the two bd list subtests that waited for bd dep add proxied support (#6244)
  • 6f8d153 test(proxy): harden history and remote front doors (#6293)
  • 9bc7f55 test(ready): pin the exact blocking-claim line when an open issue has a real blocker (#7953)
  • 3a79fba test(resolver): pin leading-prefix partial-ID matching for gcy-g4o (follow-up to #4376) (#7605)
  • 6d713a7 test(schema): cover the schema-27 upgrade under dolt_transaction_commit (#4137) (#8136)
  • 4183fa0 test(scripts): resolve Git Bash explicitly on Windows (#5727) (#5730)
  • 569ad60 test(scripts): the retired-lanes BUILD walk follows file symlinks, as a local runfiles tree needs (#7361)
  • f6f1228 test(serve): before-parity pins for the httpapi startup event and ordinary-workspace bd serve (P13, P14) (#7679)
  • 60598ec test(serve): point the shared-server --global case at the test server (#7167)
  • eb5ab48 test(setup): pin the Claude agent artifacts bd init and bd setup claude write (#7678)
  • e8b024c test(show): fix stdout/stderr cross-pipe race in watch delete test (#7160)
  • 9f5028c test(show): run --comments-tail through every show route; CHANGELOG bullet under Added (#6618 follow-ups) (#7383)
  • 4c4ba27 test(show): tighten the --comments-tail off-state check; share the --watch start/stop choreography (#7383 follow-ups) (#7454)
  • c28ee23 test(sql): pin more set-operation INTO classifications (code landed in #7042) (#7922)
  • 05fffb1 test(storage): versioned-history flag-off differential and statement pins (#6132, #6135) (#7681)
  • 96949bc test(storage/dolt): give each cold store its own context budget in setupTwoProjectStores (#6256)
  • e4cd352 test(store_reopen): pin explicit --db spellings onto the symlinked workspace (GH#4627) (#7949)
  • 671715b test(testutil): opt-in local dolt sql-server backend for Dolt-backed tests (#6891)
  • eaad881 test(topology): front-door capability matrix across storage topologies (proxied-parity S0) (#6576)
  • 9fdd8f6 test(tracker): add real UOW proxy conformance fixture (#6445)
  • 0a004ca test(tracker): pin the pulls that must leave the push hash alone (supersedes #7755) (#8004)
  • ebe3b6b test,ci(cmd/bd): run the Dolt-gated cmd/bd suite (advisory Bazel lane), fix in-process runner leaks and rotted tests; init --quiet stays quiet (#7185)
  • 40b3232 wy-a648lq: flip the embeddeddolt tolerant mixed-batch case to the wired-edge contract
  • 85b07f9 wy-a648lq: import wires in-batch regular<->wisp edges instead of dropping them
  • 0efe0ad wy-p0c7ut: remove dead mixed-bucket filter wrapper
  • efaeaf2 wy-t8vkyn: report missing dependency removal

Don't miss a new beads release

NewReleases is sending notifications on new releases.