Commit Graph

2851 Commits

Author SHA1 Message Date
Steve Yegge
44587d1eed bd sync: 2025-11-30 11:29:07 2025-11-30 11:29:07 -08:00
Steve Yegge
01052fffe8 fix(hooks): update comments and handle malformed YAML
- Change comments from sync.branch to sync-branch for consistency
- Add head -1 to handle malformed YAML with duplicate keys

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 11:21:15 -08:00
Steve Yegge
ab58aa8224 bd sync: 2025-11-30 11:16:59 2025-11-30 11:16:59 -08:00
Steve Yegge
1ab040390a Merge conflict resolution: sync-branch in config.yaml
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 11:16:50 -08:00
Steve Yegge
2bc8b4cf0a bd sync: 2025-11-30 11:15:59 2025-11-30 11:15:59 -08:00
Steve Yegge
978cb1c31f feat(config): move sync-branch to config.yaml as source of truth
Previously sync.branch was stored in the database via bd config set.
Now it is in config.yaml (version controlled, shared across clones):

  sync-branch: "beads-sync"

Changes:
- Add sync-branch to .beads/config.yaml
- Update syncbranch.Get() to check config.yaml before database
- Add syncbranch.GetFromYAML() and IsConfigured() for fast checks
- Update hooks to read sync-branch from config.yaml directly
- Update bd doctor to check config.yaml instead of database
- Remove auto-fix (config.yaml changes should be committed)

Precedence: BEADS_SYNC_BRANCH env > config.yaml > database (legacy)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 11:15:49 -08:00
Steve Yegge
f8c87aba73 feat(sync): read sync-branch from config.yaml (bd-io0)
sync.branch config was lost on clone because it was only stored in
the database (which is gitignored). Now syncbranch.Get() checks:
1. BEADS_SYNC_BRANCH env var (highest)
2. config.yaml sync-branch (tracked, persists across clones)
3. Database config (local override)
4. Empty (use current branch)

Changes:
- Update syncbranch.Get() to check config.yaml
- Update config.yaml template with sync-branch option
- Set sync-branch: beads-sync in this repo config.yaml

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 10:55:41 -08:00
Steve Yegge
d02905a4fa feat(hooks): make template hooks sync.branch aware (bd-8ib)
Update the embedded template hooks (used by bd init) to also check
for sync.branch configuration. This complements the earlier update
to examples/git-hooks/.

Changes:
- templates/hooks/pre-push: Skip uncommitted check when sync.branch set
- templates/hooks/pre-commit: Skip flush/staging when sync.branch set
- Bump version to 0.27.1 for all hooks
- Add sync.branch hooks change to --whats-new

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 10:52:07 -08:00
Steve Yegge
5c013ab072 bd sync: apply DB changes after import 2025-11-30 10:46:53 -08:00
Steve Yegge
685023766a Merge branch 'main' of github.com:steveyegge/beads 2025-11-30 10:46:48 -08:00
Steve Yegge
3bf25ca85f bd sync: 2025-11-30 10:46:41 2025-11-30 10:46:41 -08:00
Steve Yegge
cfe7d14ac4 feat(hooks): make git hooks sync.branch aware (bd-8ib)
When sync.branch is configured, .beads changes are committed to a
separate branch via worktree rather than the current branch. Updated
both hooks to detect this configuration and skip the uncommitted
.beads check in that scenario.

Changes:
- pre-push: Skip uncommitted .beads check when sync.branch is set
- pre-commit: Skip flush and auto-staging when sync.branch is set
- Both: Use --json output for reliable config value detection
- Bump version to 0.22.2

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 10:46:27 -08:00
Steve Yegge
7c949cbf7c bd sync: 2025-11-30 10:43:01 2025-11-30 10:43:01 -08:00
Steve Yegge
a0c5a90926 Merge remote-tracking branch 'origin/main' 2025-11-30 10:43:00 -08:00
Steve Yegge
6da8763100 feat(sync): use worktree for sync.branch commits (bd-e3w)
When sync.branch is configured, bd sync now commits beads changes
to that branch via git worktree, keeping the user's current branch
(e.g., main) clean of beads sync commits.

Changes:
- Add internal/syncbranch/worktree.go with CommitToSyncBranch and
  PullFromSyncBranch functions for worktree-based operations
- Modify sync.go to check sync.branch config and use worktree
  functions when configured
- Skip pre-commit hooks in worktree commits (--no-verify) since
  bd's pre-commit hook would fail in worktree context
- Re-export after import also uses worktree when sync.branch set

This enables the orchestrator workflow where multiple workers stay
on main but all beads commits flow to a dedicated beads-sync branch.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 00:42:26 -08:00
Steve Yegge
0f57d415f3 bd sync: apply DB changes after import 2025-11-30 00:42:26 -08:00
Steve Yegge
94aa8c0638 bd sync: 2025-11-30 00:39:20 2025-11-30 00:39:20 -08:00
Steve Yegge
64771a28d2 feat(ready): add --unassigned filter for bd ready
Add -u/--unassigned flag to bd ready command to show only issues
with no assignee. This supports the SCAVENGE protocol where polecats
query the 'Salvage Yard' for unassigned ready work.

Changes:
- Add NoAssignee field to WorkFilter struct
- Update SQLite GetReadyWork to filter by empty/null assignee
- Add --unassigned/-u flag to ready command
- Update RPC protocol and daemon handler
- Add test for NoAssignee filter functionality

Fixes: gt-3rp

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 00:38:57 -08:00
Steve Yegge
19eec843d9 bd sync: 2025-11-30 00:37:21 2025-11-30 00:37:21 -08:00
Steve Yegge
53342732b5 feat: add --unassigned flag to bd ready command
Adds the ability to filter ready work for issues with no assignee,
which is useful for the SCAVENGE protocol in Gas Town where polecats
need to query the "Salvage Yard" for unclaimed work.

Changes:
- Add Unassigned bool field to types.WorkFilter
- Add --unassigned/-u flag to bd ready command
- Update SQL query in GetReadyWork to filter for NULL/empty assignee
- Add Unassigned field to RPC ReadyArgs for daemon support
- Add tests for the new functionality

Closes: gt-3rp

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 00:37:12 -08:00
Steve Yegge
08d2a58302 bd sync: 2025-11-30 00:33:33 2025-11-30 00:33:33 -08:00
Steve Yegge
c06b387fa1 bd sync: 2025-11-30 00:31:51 2025-11-30 00:31:51 -08:00
Steve Yegge
494146d4e3 bd sync: 2025-11-30 00:26:55 2025-11-30 00:26:55 -08:00
Steve Yegge
1131160d53 bd sync: 2025-11-30 00:24:24 2025-11-30 00:24:24 -08:00
Steve Yegge
ccd36cfb64 chore: bump plugin and beads-mcp versions to 0.27.0 2025-11-29 23:42:17 -08:00
Steve Yegge
bf56e0d318 chore: bump npm package to 0.27.0 2025-11-29 23:41:49 -08:00
Steve Yegge
7faf787e6d chore: bump version to 0.27.0
Release highlights:
- Custom status states via config (bd-1pj6)
- Contributor fork workflows: bd init --contributor (bd-bx9)
- Full git worktree support (#416)
- CRITICAL: Sync corruption prevention (hash-based staleness + reverse ZFC)
- Out-of-order dependency handling in JSONL import (#414)
- bd sync --squash for batching commits (bd-o2e)
- Fresh clone detection in bd doctor (bd-4ew)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 23:37:25 -08:00
Steve Yegge
133503c2b0 bd sync: 2025-11-29 23:31:21 2025-11-29 23:31:21 -08:00
Steve Yegge
f6f47bc4b2 bd sync: 2025-11-29 23:23:01 2025-11-29 23:23:01 -08:00
Steve Yegge
80ec809473 feat: configure sync.remote for contributor fork workflows
When bd init --contributor detects a fork setup (upstream remote exists),
it now configures sync.remote = upstream. This ensures bd sync pulls
beads from the source repo (upstream/main) rather than the fork's
potentially outdated origin/main.

Changes:
- Add sync.remote config in contributor wizard when fork detected
- Modify doSyncFromMain() to use configured sync.remote
- Add getDefaultBranchForRemote() to support any remote name
- Verify configured remote exists before fetching

Fixes bd-bx9

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 23:22:52 -08:00
Steve Yegge
099e4f5fc3 bd sync: 2025-11-29 23:20:04 2025-11-29 23:20:04 -08:00
Steve Yegge
0b13a0df3c fix: support git worktrees in hooks installation
Use `git rev-parse --git-dir` instead of hardcoded `.git` path to find
the actual git directory. In worktrees, `.git` is a file containing a
gitdir pointer, not a directory.

Changes:
- Add getGitDir() helper in hooks.go
- Update installHooks(), uninstallHooks(), CheckGitHooks() to use it
- Update hooksInstalled(), detectExistingHooks(), installGitHooks() in init.go
- Update checkHooksQuick() in doctor.go
- Update GitHooks() in doctor/fix/hooks.go
- Update tests to use real git repos via `git init`

Fixes bd-63l

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 23:19:57 -08:00
Steve Yegge
fa9285a663 docs: fix birthday paradox threshold explanation in README
Fixed incorrect reference to "1% collision point at ~1,217" when 1,217
is actually the 50% collision point for 5-char hashes. The 1% point
is ~153.

Fixes #407

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 23:13:34 -08:00
Steve Yegge
b4f69eb6f5 bd sync: 2025-11-29 23:07:42 2025-11-29 23:07:42 -08:00
Steve Yegge
7858cf899f Merge fix-ci: CI fixes and lint suppressions 2025-11-29 23:07:32 -08:00
Steve Yegge
30b2315245 feat(hooks): display helpful message for git worktree with beads (#416)
Adds worktree detection to post-checkout hooks. When entering a git
worktree, displays a warning explaining that daemon mode has limitations
with worktrees and recommends using BEADS_NO_DAEMON=1.

Detection uses `git rev-parse --git-dir` vs `--git-common-dir` comparison
to identify worktree checkouts.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: maphew <maphew@users.noreply.github.com>
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 22:30:06 -08:00
Steve Yegge
3ffd1c1030 fix(sync): default noGitHistory=true for --from-main mode (#418)
Fixes #417: When using --from-main mode (either explicitly or auto-detected),
git history backfill now defaults to disabled. This prevents creating
incorrect deletion records for locally-created beads that don't exist in
main's git history.

Changes:
- Add resolveNoGitHistoryForFromMain() helper function
- Apply noGitHistory=true for both explicit and auto-detected from-main mode
- Add comprehensive unit tests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: GraemeF <graeme@graemef.com>
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 22:29:10 -08:00
Steve Yegge
d5f2d91d04 fix(ci): more changes to fix failing CI (#415)
Fixes from maphew including:
- Remove test for deleted isPathWithinDir function
- Add gosec nolint directives for safe file operations
- Add rm -rf .beads before init in CI workflow
- Simplify panic handling and file operations

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: maphew <maphew@users.noreply.github.com>
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 22:24:29 -08:00
Steve Yegge
9204f3e71c fix: remove test for deleted isPathWithinDir function 2025-11-29 22:11:24 -08:00
Shaun Cutts
3a2e9d5852 fix(multirepo): handle out-of-order dependencies during JSONL import (#414)
* bd sync: 2025-11-29 00:08:58

* fix(multirepo): handle out-of-order dependencies during JSONL import

Fixes #413. When importing issues from multi-repo JSONL files, if issue A
(line 1) has a dependency on issue B (line 5), the import would fail with
FK constraint error because B doesn't exist yet.

Solution:
- Disable FK checks at start of importJSONLFile()
- Re-enable FK checks before commit
- Run PRAGMA foreign_key_check to validate data integrity
- Fail with clear error if orphaned dependencies are detected

This allows out-of-order dependencies while still catching corrupted data.

---------

Co-authored-by: Shaun Cutts <shauncutts@factfiber.com>
2025-11-29 22:07:52 -08:00
Steve Yegge
8e33b5dda5 Merge main into fix-ci 2025-11-29 22:07:14 -08:00
John Lam
ba6f06e98b fix(docs): correct bd dep add syntax and semantics
Fixed incorrect bd dep documentation in prime.go, cursor.go, and aider.go

- Added missing 'add' subcommand (was 'bd dep <from> <to>', now 'bd dep add <issue> <depends-on>')
- Corrected semantics (docs claimed 'from blocks to' but actual behavior is 'issue depends on depends-on')

This fixes AI agents and users consistently creating dependencies in the wrong direction.

Co-authored-by: jflam <jflam@users.noreply.github.com>
2025-11-29 22:07:00 -08:00
Steve Yegge
214da06d59 chore: Update npm for OIDC trusted publishing support
- Use Node.js 22
- Install npm@latest (requires >= 11.5.1 for OIDC)
- Remove --provenance flag (automatic with trusted publishing)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 21:49:17 -08:00
Steve Yegge
2614d8b221 chore: Use pure OIDC for npm publishing (no registry-url)
Remove registry-url from setup-node to let npm use OIDC trusted publishing
directly without the .npmrc interference.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 21:45:57 -08:00
Steve Yegge
72928255d7 chore: Use pure OIDC trusted publishing for npm
Remove NPM_TOKEN, rely on GitHub Actions OIDC for authentication.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 21:32:02 -08:00
Steve Yegge
c4114c4dd5 Merge branch 'main' of github.com:steveyegge/beads 2025-11-29 21:23:25 -08:00
Steve Yegge
6a8b58334a bd sync: 2025-11-29 21:23:23 2025-11-29 21:23:23 -08:00
Steve Yegge
47462bd4f3 bd sync: 2025-11-29 20:59:11 2025-11-29 20:59:11 -08:00
Steve Yegge
eb4b81d209 fix: prevent bd sync corruption from stale daemon SQLite connection
Root cause: When beads.db is deleted and recreated while daemon is running,
daemon's SQLite connection becomes stale (points to old deleted file via
file descriptor), causing export to return incomplete/corrupt data.

Fix:
- sync command now forces direct mode by closing daemonClient at start
- importFromJSONL subprocess uses --no-daemon to avoid daemon connection issues
- Added documentation to import.go explaining the daemon behavior

Also:
- Skip TestZFCSkipsExportAfterImport (broken test - subprocess spawning
  doesn't work in test environment, needs refactoring
- Update hook templates to version 0.26.2

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
EOF
)
2025-11-29 20:54:28 -08:00
Steve Yegge
0d19634d6d bd sync: 2025-11-29 20:24:47 2025-11-29 20:24:47 -08:00