Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
50f715b
/{cmd,internal}: move local only state to dolt ignored tables
coffeegoddd Apr 14, 2026
65dbdbf
/internal/storage: fix migration issue
coffeegoddd Apr 14, 2026
f079786
/internal/storage: remove conflicting column on schema migration table
coffeegoddd Apr 14, 2026
9aa9b82
/internal/storage/schema/schema.go: fix tests
coffeegoddd Apr 14, 2026
948e1e6
fix(nix): use gms_pure_go, fix vendorHash, drop ICU dependency
TheCTD Apr 14, 2026
b3aa31f
Merge pull request #3277 from coffeegoddd/db/fix-conflict
coffeegoddd Apr 14, 2026
4c52b9f
release: beads v1.0.1
steveyegge Apr 15, 2026
a3f834b
release: beads v1.0.2 — npm provenance URL fix
steveyegge Apr 15, 2026
db76989
chore: switch crew policy from direct-push to PR-by-default
steveyegge Apr 15, 2026
27c3338
docs(test): reference GH#3260 investigation near memory race workarou…
maphew Apr 15, 2026
e3586db
refactor: route duplicate commands through CommandContext accessors (…
maphew Apr 15, 2026
d8d298d
refactor: extract create issue build and dry-run render helpers (bd-i…
maphew Apr 15, 2026
63a24bc
[codex] Share epic DB setup in one suite (#3296)
maphew Apr 15, 2026
4e3dbb6
fix(nix): update vendorHash after dependabot go.sum bumps (GH#3221) (…
maphew Apr 15, 2026
df25aa9
Rename ICU-only test path to explicit opt-in workflow (bd-b18) (#3291)
maphew Apr 16, 2026
0b9d5a9
fix(go.mod): remove broken replace directive that blocks go install (…
maphew Apr 16, 2026
5715f54
feat: make CGO_ENABLED=0 the blessed go install path (GH#3303)
maphew Apr 16, 2026
2ade22e
chore(build): codify the gms_pure_go build-tag policy (GH#3303)
maphew Apr 16, 2026
4c240fc
chore(gitignore): ignore .codex marker and .claude/*.lock
maphew Apr 16, 2026
3c67e86
fix: rebind selected workspace before db command startup (#3230)
julianknutsen Apr 16, 2026
5a51e33
chore(deps): bump actions/upload-pages-artifact from 4 to 5 (#3318)
dependabot[bot] Apr 17, 2026
632839c
chore(deps): bump fastmcp from 3.2.3 to 3.2.4 in /integrations/beads-…
dependabot[bot] Apr 17, 2026
a6152f7
chore(deps): bump actions/checkout from 4 to 6 (#3320)
dependabot[bot] Apr 17, 2026
8b5d546
chore(deps): bump github.com/anthropics/anthropic-sdk-go (#3322)
dependabot[bot] Apr 17, 2026
e4f0738
chore(deps): bump go.opentelemetry.io/otel/exporters/stdout/stdoutmet…
dependabot[bot] Apr 17, 2026
e3c26c6
chore(deps): bump golang.org/x/term from 0.41.0 to 0.42.0 (#3324)
dependabot[bot] Apr 17, 2026
37d30f2
chore(deps): bump charm.land/lipgloss/v2 from 2.0.2 to 2.0.3 (#3325)
dependabot[bot] Apr 17, 2026
cf42092
chore(deps): bump pydantic in /integrations/beads-mcp (#3321)
dependabot[bot] Apr 17, 2026
7bd9e18
fix(audit): use atomic write to prevent torn lines under concurrent O…
harry-miller-trimble Apr 17, 2026
0271720
fix: linear tracker reads yaml-only config keys from config.yaml (#3315)
natorious Apr 17, 2026
abf03e1
Keep regular epics open after the last child closes (#3276)
workingdoge Apr 17, 2026
bc74f7e
fix(fetch): run GC after failed DOLT_FETCH to prevent tmp_pack_* accu…
maphew Apr 17, 2026
d57dc71
fix(dolt): auto-recover from corrupt manifest on startup (GH#3290) (#…
maphew Apr 18, 2026
c446a2e
fix(linear): harden push against data clobbering (#3328)
maphew Apr 18, 2026
397eb4d
fix(ado): use date-only format for WIQL ChangedDate queries (#3345)
harry-miller-trimble Apr 20, 2026
dbf793f
fix: auto-sanitize hyphenated dolt_database on embedded-mode upgrade …
kevglynn Apr 20, 2026
b90ee4c
ci: add nix build check to catch vendorHash drift (GH#3298) (#3364)
maphew Apr 20, 2026
5395e85
fix(nix): use gms_pure_go, fix vendorHash, drop ICU dependency
TheCTD Apr 14, 2026
d341710
Merge branch 'fix/nixos-build' of github.com:TheCTD/beads into fix/ni…
TheCTD Apr 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 22 additions & 7 deletions .buildflags
Original file line number Diff line number Diff line change
@@ -1,9 +1,24 @@
# This file is sourced by scripts to provide standard build flags.
# Mirrors Makefile CGO configuration for consistency.
# Canonical build flags for beads. Source this in any script that invokes
# `go` to get the project-wide build settings. Scripts that intentionally
# exercise the ICU path (e.g. scripts/test-cgo.sh) do NOT source this.
#
# NOTE: ICU flags are NOT set here. The gms_pure_go build tag (used by
# goreleaser and `make build`) tells go-mysql-server to use Go's stdlib
# regex, eliminating the ICU runtime dependency. Only test scripts that
# explicitly need ICU (test-cgo.sh) should set ICU flags.
# Rationale: go-mysql-server links ICU by default under cgo. beads never
# uses SQL REGEXP, so we always build with -tags=gms_pure_go. See
# docs/ICU-POLICY.md for the full policy.

export CGO_ENABLED=1
# Embedded Dolt requires CGO; server mode and nocgo builds do not. Default
# to 1 for the embedded-capable build paths that sourced this, but respect
# a caller who explicitly set CGO_ENABLED=0 (e.g. a static/nocgo build).
: "${CGO_ENABLED:=1}"
export CGO_ENABLED

# Build tag that tells go-mysql-server to use Go's stdlib regex instead of
# the ICU-backed go-icu-regex. Exported so callers can compose with extra
# tags: `go test -tags=regression,$BEADS_BUILD_TAGS ...`
export BEADS_BUILD_TAGS="gms_pure_go"

# Propagate the tag via GOFLAGS so every subsequent bare `go` invocation
# picks it up automatically. Idempotent: re-sourcing is a no-op.
if [[ "${GOFLAGS:-}" != *gms_pure_go* ]]; then
export GOFLAGS="${GOFLAGS:+$GOFLAGS }-tags=${BEADS_BUILD_TAGS}"
fi
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"name": "beads",
"source": "./claude-plugin",
"description": "AI-supervised issue tracker for coding workflows",
"version": "1.0.0"
"version": "1.0.2"
}
]
}
26 changes: 0 additions & 26 deletions .claude/hooks/block-gh-watch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,4 @@ if echo "$COMMAND" | grep -qE 'gh run watch|gh run list.*--watch'; then
exit 0
fi

# Block PR creation for crew/maintainers. Crew workers push directly to main.
# External contributors (beads.role=contributor or fork origin) need PRs.
if echo "$COMMAND" | grep -qE 'gh pr create'; then
ROLE=$(git config --get beads.role 2>/dev/null || echo "")
ORIGIN=$(git config --get remote.origin.url 2>/dev/null || echo "")

# Allow if role is explicitly contributor
if [ "$ROLE" = "contributor" ]; then
exit 0
fi

# Allow if origin points to a fork (not the upstream repo)
if [ -n "$ORIGIN" ] && echo "$ORIGIN" | grep -qvE 'steveyegge/beads'; then
exit 0
fi

jq -n '{
hookSpecificOutput: {
hookEventName: "PreToolUse",
permissionDecision: "deny",
permissionDecisionReason: "BLOCKED: Crew workers do NOT create PRs. Push directly to main with `git push`. PRs are for external contributors only. If you are reviewing an external PR, use fix-merge: checkout the PR, fix/rebase, merge to main, push, then close the PR."
}
}'
exit 0
fi

exit 0
4 changes: 4 additions & 0 deletions .devcontainer/setup.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
#!/bin/bash
set -e

# Canonical build flags (GOFLAGS=-tags=gms_pure_go, CGO_ENABLED=1).
# shellcheck source=../.buildflags
source "$(dirname "$0")/../.buildflags"

echo "🔧 Building bd from source..."
go build -o bd ./cmd/bd

Expand Down
2 changes: 1 addition & 1 deletion .github/scripts/embedded-test-shard.sh
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ if [ -x "$CMD_BINARY" ]; then
"$@"
else
echo "Warning: pre-built test binary not found at $CMD_BINARY, falling back to go test"
exec go test -v -race -count=1 -timeout 20m \
exec go test -tags=gms_pure_go -v -race -count=1 -timeout 20m \
-run "$RUN_REGEX" \
"$@" \
./cmd/bd/
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,16 @@ concurrency:
cancel-in-progress: true

jobs:
# Fast check: every `go build|test|run|generate|install` invocation in
# tracked scripts/hooks/CI carries -tags=gms_pure_go. Prevents ICU-linkage
# regressions from re-entering the build (see docs/ICU-POLICY.md).
check-build-tags:
name: Check build-tag policy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- run: ./scripts/check-build-tags.sh

# Fast check to ensure all version files are in sync
check-version-consistency:
name: Check version consistency
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/cross-version-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
needs: versions

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Set up Go
uses: actions/setup-go@v5
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ jobs:
website/build

- name: Upload artifact
uses: actions/upload-pages-artifact@v4
uses: actions/upload-pages-artifact@v5
with:
path: website/build

Expand Down
31 changes: 31 additions & 0 deletions .github/workflows/nix-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: nix build

on:
pull_request:
paths:
- 'go.mod'
- 'go.sum'
- 'default.nix'
- 'flake.nix'
- 'flake.lock'
push:
branches: [main]
paths:
- 'go.mod'
- 'go.sum'
- 'default.nix'
- 'flake.nix'
- 'flake.lock'
workflow_dispatch:

jobs:
nix-build:
name: nix build .#default
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install Nix
uses: DeterminateSystems/determinate-nix-action@v3
- name: Build
run: nix build .#default --print-build-logs
2 changes: 1 addition & 1 deletion .github/workflows/regression.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,4 @@ jobs:
key: regression-baseline-${{ hashFiles('tests/regression/BASELINE_VERSION') }}

- name: Run regression tests
run: go test -tags=regression -timeout=10m -v ./tests/regression/...
run: go test -tags=regression,gms_pure_go -timeout=10m -v ./tests/regression/...
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ pkg/
.claude/settings.local.json
.claude/worktrees/
.claude/*.log
.claude/*.lock

# Codex CLI - local marker
.codex


# OS
Expand Down
10 changes: 5 additions & 5 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,12 @@ echo 'Updated text' | bd update <id> --description=-
## Testing Commands (No Ambiguity)

- Default local test command: `make test` (or `./scripts/test.sh`).
- Full CGO-enabled suite: `make test-full-cgo` (or `./scripts/test-cgo.sh ./...`).
- On macOS, do **not** run raw `CGO_ENABLED=1 go test ./...` unless ICU flags are set; use the script/Make target above.
- If you need package- or test-scoped CGO runs:
- Opt-in ICU regex path: `make test-icu-path` (or `./scripts/test-icu-path.sh ./...`).
- This ICU path is maintainer-only and not part of normal validation; `make test-full-cgo` and `./scripts/test-cgo.sh` are deprecated aliases.
- For package- or test-scoped shipped-config CGO runs, prefer:
```bash
./scripts/test-cgo.sh ./cmd/bd/...
./scripts/test-cgo.sh -run '^TestName$' ./cmd/bd/...
CGO_ENABLED=1 go test -tags gms_pure_go ./cmd/bd/...
CGO_ENABLED=1 go test -tags gms_pure_go -run '^TestName$' ./cmd/bd/...
```

## Non-Interactive Shell Commands
Expand Down
28 changes: 15 additions & 13 deletions AGENT_INSTRUCTIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ This document contains detailed operational instructions for AI agents working o

- **Go version**: 1.24+
- **Linting**: `golangci-lint run ./...` (baseline warnings documented in [docs/LINTING.md](docs/LINTING.md))
- **Testing**: All new features need tests (`make test` for local baseline, `make test-full-cgo` when validating full CGO paths)
- **Testing**: All new features need tests (`make test` for the normal local/CI path, `make test-icu-path` only when intentionally exercising the opt-in ICU regex path)
- **Documentation**: Update relevant .md files

### File Organization
Expand Down Expand Up @@ -66,7 +66,7 @@ into temp repos and produce flaky test behavior.
### Before Committing

1. **Run tests**: `make test` (or `./scripts/test.sh`)
- For full CGO validation: `make test-full-cgo`
- Only if intentionally exercising the ICU regex path: `make test-icu-path`
2. **Run linter**: `golangci-lint run ./...` (ignore baseline warnings)
3. **Update docs**: If you changed behavior, update README.md or other docs
4. **Commit**: With git hooks installed (`bd hooks install`), Dolt changes are auto-committed
Expand Down Expand Up @@ -101,15 +101,17 @@ bd hooks install

**Merge conflicts**: Rare with hash IDs. Dolt uses cell-level 3-way merge for conflict resolution.

## Git Workflow: Push to Main, Never PR
## Git Workflow: PR by Default

Crew workers push directly to main. **Never create pull requests.**
Crew workers use a PR-based workflow. Beads is a dependency of Gas City, so we
defer to the standard PR flow to keep changes reviewable.

- `git push` to main is the only way to land work
- `gh pr create` is forbidden — PRs are for external contributors, not crew
- Do not create feature branches for your own work — commit and push to main
- When handling external PRs, use fix-merge: checkout the PR branch locally,
fix/rebase onto main, merge locally, `git push`, then close the PR
- Work on a feature branch, push the branch, open a PR against `main`
- `gh pr create` is the normal path to land work
- Direct push to main is reserved for releases (tag + release commit) and
narrow operational fixes; prefer a PR when unsure
- When handling external contributor PRs, use fix-merge: checkout the PR
branch locally, fix/rebase onto main, merge via PR, then close the PR

### External Contributor PRs: Check Before You Build

Expand Down Expand Up @@ -141,7 +143,7 @@ This is enforced by pre-use hooks. If you try `gh pr create`, it will be blocked
1. **File beads issues for any remaining work** that needs follow-up
2. **Ensure all quality gates pass** (only if code changes were made):
- Run `make lint` or `golangci-lint run ./...` (if pre-commit installed: `pre-commit run --all-files`)
- Run `make test` (and `make test-full-cgo` when CGO-relevant code changed)
- Run `make test` (and `make test-icu-path` only if you intentionally need the ICU regex path)
- File P0 issues if quality gates are broken
3. **Update beads issues** - close finished work, update status
4. **PUSH TO REMOTE - NON-NEGOTIABLE** - This step is MANDATORY. Execute ALL commands below:
Expand Down Expand Up @@ -311,8 +313,8 @@ make install
# Test (local baseline)
make test

# Test with full CGO-enabled suite (local/CI parity)
make test-full-cgo
# Optional ICU regex path smoke (maintainer-only, not normal validation)
make test-icu-path

# Coverage run
go test -coverprofile=coverage.out ./...
Expand Down Expand Up @@ -393,7 +395,7 @@ This handles the entire release workflow automatically, including waiting ~5 min

1. Bump version: `./scripts/bump-version.sh <version> --commit`
2. Update CHANGELOG.md with release notes
3. Run tests: `make test` (and `make test-full-cgo` for CGO-related changes)
3. Run tests: `make test` (and `make test-icu-path` only if you intentionally need the ICU regex path)
4. Push version bump: `git push origin main`
5. Tag release: `git tag v<version> && git push origin v<version>`
6. Update Homebrew: `./scripts/update-homebrew.sh <version>` (waits for GitHub Actions)
Expand Down
Loading