Commit Graph

5370 Commits

Author SHA1 Message Date
beads/crew/dave
4ee281ad48 bd sync: 2026-01-02 01:30:56 2026-01-02 01:30:56 -08:00
beads/crew/dave
7de94a82d3 bd sync: 2026-01-02 01:30:25 2026-01-02 01:30:25 -08:00
beads/witness
c75b79602d bd sync: 2026-01-02 01:08:47 2026-01-02 01:08:47 -08:00
obsidian
8fe681a4e3 chore: bump version to 0.43.0 (bd-lejq)
- Update Version in cmd/bd/version.go: 0.42.0 → 0.43.0
- Update CHANGELOG.md with 0.43.0 section
- Fix test isolation in TestTrackBdVersion_NoBeadsDir

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 01:07:34 -08:00
beads/refinery
3e7eba9241 bd sync: 2026-01-02 00:57:14 2026-01-02 00:57:14 -08:00
beads/crew/wolf
16993bb1fc bd sync: 2026-01-02 00:54:43 2026-01-02 00:54:43 -08:00
beads/crew/wolf
e5f768e9f5 test: add unit tests for bd setup gemini
Covers:
- Global and project installation
- Stealth mode
- Idempotent installation
- Preserving existing settings/hooks
- Check and remove operations
- Hook detection logic

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 00:19:14 -08:00
beads/crew/emma
46f72ed18c test(sync): add tests for pre-sync validation hook (bd-nv4g)
Add comprehensive tests for validateOpenIssuesForSync():
- ModeNone: validation skipped when config is "none"
- ModeEmpty: validation skipped for empty config (backwards compat)
- ModeWarn: sync proceeds with warnings for invalid issues
- ModeError: sync blocked with error for invalid issues
- NoWarnings: valid issues pass validation
- SkipsClosedIssues: closed issues not validated
- ChoreHasNoRequirements: chore type has no required sections

The pre-sync validation hook was already implemented as part of bd-t7jq.
This commit adds the missing test coverage.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 00:05:12 -08:00
beads/crew/emma
f60f132bde bd sync: 2026-01-02 00:04:55 2026-01-02 00:04:55 -08:00
beads/crew/wolf
a06b40bd48 feat: add bd setup gemini for Gemini CLI integration (#845)
Add support for Gemini CLI hook-based integration, similar to Claude Code:
- bd setup gemini: Install SessionStart/PreCompress hooks
- bd setup gemini --check: Verify installation
- bd setup gemini --remove: Remove hooks
- bd setup gemini --project: Project-only installation
- bd setup gemini --stealth: Use bd prime --stealth

Also adds Gemini CLI integration check to bd doctor.

Gemini CLI's hook system is nearly identical to Claude Code's,
making this a clean, low-maintenance addition.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 00:02:38 -08:00
beads/crew/fang
6572654cdc fix: allow yaml-only config operations without database (GH#536)
Users could not run 'bd config set no-db true' without already having a
database, creating a chicken-and-egg problem. The PersistentPreRunE
would fail with 'no beads database found' before the config command
could even run.

The fix detects when a yaml-only config operation is being attempted
(config set/get with keys like no-db, no-daemon, sync.branch, etc.)
and allows it to proceed without requiring a database.

Before:
  $ bd config set no-db true
  Error: no beads database found

After:
  $ bd config set no-db true
  Set no-db = true (in config.yaml)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 00:02:20 -08:00
beads/crew/wolf
2fd44254b6 bd sync: 2026-01-02 00:02:10 2026-01-02 00:02:10 -08:00
beads/crew/dave
962c9e1fda bd sync: 2026-01-01 23:55:53 2026-01-01 23:55:53 -08:00
beads/crew/dave
8601ed01b6 fix: rename wisp prefix from 'eph' to 'wisp' (bd-ucj8)
New wisps now use 'wisp' segment (e.g., gt-wisp-xxx) instead of 'eph'.
Detection patterns updated to support both for backwards compatibility
with existing gt-eph-* wisps in databases.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Executed-By: beads/crew/dave
Rig: beads
Role: crew
2026-01-01 23:55:40 -08:00
beads/crew/wolf
bb89e53849 bd sync: 2026-01-01 23:47:31 2026-01-01 23:47:31 -08:00
beads/crew/emma
d3fb7b3b14 bd sync: 2026-01-01 20:12:03 2026-01-01 20:12:03 -08:00
Peter Chanthamynavong
d371baf2ca feat(dates): add --due and --defer timestamp options with natural language parsing (#847)
* feat(dates): add due date schema and --due flag

- Add due_at and defer_until columns to issues table via migration 035
- Implement --due flag on create command with ISO date parsing
- Extend RPC protocol and daemon to pass DueAt from CLI to storage
- Display DueAt and DeferUntil in show command output
- Update Issue type with new date fields

Users can now set due dates when creating issues, enabling deadline-based
task management.

* feat(dates): add compact duration parser (+6h, +1d, +2w)

- Create internal/timeparsing package with layered parser architecture
- Implement parseCompactDuration with regex pattern [+-]?\d+[hdwmy]
- Add comprehensive test suite (22 cases) for duration parsing
- Integrate into create.go with fallback to ISO format

Supports hours (h), days (d), weeks (w), months (m), and years (y).
Negative values allowed for past dates.

* feat(dates): add NLP parsing for natural language dates

Integrate olebedev/when library for natural language time expressions.
The layered parser now handles: compact duration → absolute formats → NLP.

Changes:
- Add olebedev/when dependency for NLP parsing
- Implement ParseNaturalLanguage and ParseRelativeTime functions
- Reorder layers: absolute formats before NLP to avoid misinterpretation
- Simplify create.go to use unified ParseRelativeTime
- Add comprehensive NLP test coverage (22 test cases)

Supports: tomorrow, next monday, in 3 days, 3 days ago

* feat(dates): add --defer flag to create/update/defer commands

Add time-based deferral support alongside existing status-based defer.
Issues can now be hidden from bd ready until a specific time.

Changes:
- Add --defer flag to bd create (sets defer_until on creation)
- Add --due and --defer flags to bd update (modify existing issues)
- Add --until flag to bd defer (combines status=deferred with defer_until)
- Add DueAt/DeferUntil fields to UpdateArgs in protocol.go

Supports: +1h, tomorrow, next monday, 2025-01-15

* feat(dates): add defer_until filtering to ready command

Add time-based deferral support to bd ready:

- Add --include-deferred flag to show issues with future defer_until
- Filter out issues where defer_until > now by default
- Update undefer to clear defer_until alongside status change
- Add IncludeDeferred to WorkFilter and RPC ReadyArgs

Part of GH#820: Relative Date Parsing (Phase 5)

* feat(dates): add polish and tests for relative date parsing

Add user-facing warnings when defer date is in the past to help catch
common mistakes. Expand help text with format examples and document
the olebedev/when September parsing quirk.

Tests:
- TestCreateSuite/WithDueAt, WithDeferUntil, WithBothDueAndDefer
- TestReadyWorkDeferUntil (ExcludesFutureDeferredByDefault, IncludeDeferredShowsAll)

Docs:
- CLAUDE.md quick reference updated with new flags
- Help text examples for --due, --defer on create/update

Closes: Phase 6 of beads-820-relative-dates spec

* feat(list): add time-based query filters for defer/due dates

Add --deferred, --defer-before, --defer-after, --due-before, --due-after,
and --overdue flags to bd list command. All date filters now support
relative time expressions (+6h, tomorrow, next monday) via the
timeparsing package.

Filters:
- --deferred: issues with defer_until set
- --defer-before/after: filter by defer_until date range
- --due-before/after: filter by due_at date range
- --overdue: due_at in past AND status != closed

Existing date filters (--created-after, etc.) now also support relative
time expressions through updated parseTimeFlag().

* build(nix): update vendorHash for olebedev/when dependency

The olebedev/when library was added for natural language date parsing
(GH#820). This changes go.sum, requiring an updated vendorHash in the
Nix flake configuration.
2026-01-01 20:06:13 -08:00
Steve Yegge
e4042e3e1a Merge pull request #846 from steveyegge/feat/type-aliases-gt-pvhsv
feat(list): Add type aliases for --type flag
2026-01-01 20:05:40 -08:00
beads/crew/wolf
050d1a4413 fix: prevent infinite loop in bd hooks run when .old is a bd shim (#843)
When bd hooks install --chain renamed an existing bd shim to .old,
subsequent bd hooks run would execute the .old shim, which would
call bd hooks run again, creating infinite recursion.

Two fixes:
1. installHooks(): Skip renaming to .old if existing hook is a bd shim
2. runChainedHook(): Skip executing .old if it is a bd shim

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 19:46:34 -08:00
Ramiro Rivera
d6045ab297 Add Windows ARM64 build support (#834)
* feat(build): add Windows ARM64 build support

- .goreleaser.yml
- .github/workflows/release.yml
- winget/SteveYegge.beads.installer.yaml

Add Windows ARM64 (aarch64) build target to support modern Windows devices
like Surface Pro X and Snapdragon-based laptops.

Changes:
- Added bd-windows-arm64 build configuration with CGO cross-compiler
- Installed gcc-mingw-w64-aarch64 toolchain in CI release workflow
- Added ARM64 installer entry to WinGet manifest (placeholder SHA256)
- Updated release header to mention Windows ARM64 support

The npm package already supports ARM64 in its cpu array.

Fixes: #833

* fix(build): use CGO_ENABLED=0 for Windows ARM64

- Remove non-existent gcc-mingw-w64-aarch64 package from CI
- Use CGO_ENABLED=0 since ncruces/go-sqlite3 is WASM-based
- Remove unnecessary CC/CXX cross-compiler settings

Addresses review feedback from @steveyegge on PR #834.

* style: remove inconsistent inline comment from goreleaser config

Aligns with existing style where CGO_ENABLED entries have no inline comments.
2026-01-01 19:46:02 -08:00
beads/witness
78b6db9fcf bd sync: 2026-01-01 19:33:55 2026-01-01 19:33:55 -08:00
topaz
65fb0c6d77 feat(config): add validation.on-create and validation.on-sync config options (bd-t7jq)
Add .beads/config.yaml support for template validation settings:
- validation.on-create: warn|error|none (default: none)
- validation.on-sync: warn|error|none (default: none)

When set to "warn", issues missing required sections (based on type) show
warnings but operations proceed. When set to "error", operations fail.

Implementation:
- Add validation keys to YamlOnlyKeys in yaml_config.go
- Add defaults in config.go
- Wire up bd create to check validation.on-create config
- Wire up bd sync to run validation before export
- Add tests for config loading
- Update CONFIG.md documentation

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 19:31:12 -08:00
beads/refinery
1f818a3f7e bd sync: 2026-01-01 19:27:29 2026-01-01 19:27:29 -08:00
beads/witness
756622c219 bd sync: 2026-01-01 19:27:21 2026-01-01 19:27:21 -08:00
dag
171151cf98 feat(list): Add type aliases for --type flag (gt-pvhsv)
Add convenience aliases for common type names:
- mr → merge-request
- feat → feature
- mol → molecule

Applied to bd list, bd ready, and bd export commands.
Case-insensitive matching (MR, Mr, mr all work).

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 18:17:12 -08:00
beads/refinery
137d115849 bd sync: 2026-01-01 16:28:26 2026-01-01 16:28:26 -08:00
beads/witness
64c03c62c3 bd sync: 2026-01-01 16:27:09 2026-01-01 16:27:09 -08:00
jasper
b73085962c feat: Implement Step.Gate evaluation (Phase 1: Human Gates)
This implements Phase 1 of the Step.Gate feature (bd-7zka.2):

- bd cook now creates gate issues for steps with gate fields
- Gate issues have type=gate and block the gated step via dependency
- bd list filters out gate issues by default (use --include-gates to show)
- New bd gate command with list and resolve subcommands

Gate types supported in Phase 1:
- human: Manual closure via bd close or bd gate resolve

Implementation details:
- createGateIssue() in cook.go creates gate issues with proper metadata
- collectSteps() creates gate dependencies when processing gated steps
- IssueFilter.ExcludeTypes added to storage layer for type-based filtering
- Gate command provides dedicated UX for gate management

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 16:25:59 -08:00
beads/refinery
ca58ec6528 bd sync: 2026-01-01 16:20:20 2026-01-01 16:20:20 -08:00
beads/witness
8d004bad03 bd sync: 2026-01-01 16:19:46 2026-01-01 16:19:46 -08:00
beads/witness
b75f5187b6 bd sync: 2026-01-01 16:18:26 2026-01-01 16:18:26 -08:00
beads/refinery
df7dc29e7d bd sync: 2026-01-01 16:11:36 2026-01-01 16:11:36 -08:00
beads/refinery
12e67b0175 bd sync: 2026-01-01 15:50:20 2026-01-01 15:50:20 -08:00
beads/crew/fang
875633a69d bd sync: 2026-01-01 15:35:22 2026-01-01 15:35:22 -08:00
beads/crew/fang
6c8e68195a bd sync: 2026-01-01 15:33:43 2026-01-01 15:33:43 -08:00
beads/crew/emma
09d38de6df feat(create): add --validate flag for template validation (bd-ik1b)
Add opt-in strict mode that fails creation if required sections are
missing. Uses ValidateTemplate() under the hood.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 14:20:29 -08:00
beads/crew/grip
be70972eec feat(cli): add bd lint command for template validation (bd-gn5r)
Checks issues for missing recommended sections based on type:
- bd lint              # Lint all open issues
- bd lint bd-xxx       # Lint specific issue
- bd lint --type bug   # Filter by type
- bd lint --json       # JSON output for CI

Supports both daemon and direct mode. Exit code 1 when warnings found.
Part of opt-in validation epic (bd-ou35).

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 14:18:49 -08:00
beads/crew/grip
db93ba0709 feat(validation): add ValidateTemplate() function (bd-615z)
Implements template validation for bd lint and bd create --validate:
- ValidateTemplate() checks description for required sections
- LintIssue() validates an existing issue
- TemplateError provides actionable missing section details
- Case-insensitive, flexible heading matching

Also fixes: close.go missing session parameter in CloseIssue calls

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 12:42:43 -08:00
beads/crew/grip
e6ee7a6912 feat(types): add RequiredSections() method to IssueType (bd-v2mr)
Foundation for opt-in template validation (bd-ou35). Returns recommended
markdown sections per issue type:
- Bug: Steps to Reproduce, Acceptance Criteria
- Task/Feature: Acceptance Criteria
- Epic: Success Criteria
- Others: no requirements

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 11:28:34 -08:00
gastown/crew/gus
c56cf4e4a7 bd sync: 2026-01-01 11:26:48 2026-01-01 11:26:48 -08:00
gastown/crew/gus
a9e70e3fe5 fix: Add cross-rig routing support to bd close
The close command now properly routes to different beads directories
based on issue ID prefix, matching the behavior of bd show/update.

Changes:
- Check needsRouting() for each ID in both daemon and direct mode
- Handle routed IDs via resolveAndGetIssueWithRouting()
- Close issues in the correct remote store

Fixes bd-3jrb

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 11:26:18 -08:00
gastown/polecats/nux
5ae088b594 fix: bd update supports cross-rig bead updates via prefix routing (gt-wq1wb)
The bd update command now checks needsRouting() before attempting daemon
RPC resolution. When an issue ID (like hq-eggh5) routes to a different
beads directory, the update bypasses the daemon and uses direct mode with
the routed storage.

This enables polecats in gastown to update HQ beads (hq-* prefix) and
vice versa. The fix mirrors the routing pattern already used by bd show.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 11:26:18 -08:00
gastown/polecats/slit
8da45ce541 Fix agent ID validation to accept any rig prefix (gt-w0fqg)
The ValidateAgentID function was hardcoded to only accept 'gt-' prefix,
but beads rig uses 'bd-' prefix. Now accepts any valid prefix.

Changes:
- Extract prefix dynamically instead of hardcoding 'gt-'
- Accept IDs like bd-mayor, bd-beads-polecat-pearl
- Update error messages to be prefix-agnostic
- Add test cases for alternative prefixes

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 11:26:18 -08:00
beads/crew/wolf
918eefcf58 bd sync: 2026-01-01 11:18:01 2026-01-01 11:18:01 -08:00
beads/crew/wolf
33cf09ba3b feat: add --pretty flag to bd ready (bd-vjas)
Adds --pretty flag to bd ready for consistency with bd list.
Uses the same displayPrettyList() function to show issues in
a tree format with status/priority symbols.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 11:17:31 -08:00
obsidian
743a2d98aa chore: remove repo cruft (bd_new, @AGENTS.md)
- Remove bd_new (31MB binary that should never have been tracked)
- Remove @AGENTS.md (duplicate that was already removed but still tracked)
- state.json already in .gitignore and not tracked
- history/EPHEMERAL_MOLECULES_DESIGN.md does not exist

(bd-ov1u)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 11:14:21 -08:00
gastown/polecats/nux
628ab911a0 fix: bd update supports cross-rig bead updates via prefix routing (gt-wq1wb)
The bd update command now checks needsRouting() before attempting daemon
RPC resolution. When an issue ID (like hq-eggh5) routes to a different
beads directory, the update bypasses the daemon and uses direct mode with
the routed storage.

This enables polecats in gastown to update HQ beads (hq-* prefix) and
vice versa. The fix mirrors the routing pattern already used by bd show.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 11:14:20 -08:00
gastown/polecats/slit
eb0cc50ce6 Fix agent ID validation to accept any rig prefix (gt-w0fqg)
The ValidateAgentID function was hardcoded to only accept 'gt-' prefix,
but beads rig uses 'bd-' prefix. Now accepts any valid prefix.

Changes:
- Extract prefix dynamically instead of hardcoding 'gt-'
- Accept IDs like bd-mayor, bd-beads-polecat-pearl
- Update error messages to be prefix-agnostic
- Add test cases for alternative prefixes

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 11:14:20 -08:00
beads/witness
24fdccf3c3 bd sync: 2026-01-01 11:14:01 2026-01-01 11:14:01 -08:00
beads/crew/emma
363c5a3819 fix: bd sync fails with exit 128 in bare repo worktrees (GH#827)
Two fixes for bare repo worktree setups:

1. fork_protection.go: Use git.GetGitDir() instead of hardcoding .git
   In worktrees, .git is a file containing gitdir path, not a directory.
   Using GetGitDir() handles this correctly.

2. sync_git.go: Simplify gitHasBeadsChanges to use absolute paths
   The previous code used git -C main-repo-root status, but in bare
   repo worktrees GetMainRepoRoot() returns the parent of the bare repo
   which is not a valid working tree. Using absolute paths without -C
   lets git find the repo from cwd, which always works.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-01 11:05:05 -08:00