Commit Graph

3192 Commits

Author SHA1 Message Date
Steve Yegge
f83a8f5a38 fix(ci): update nix vendorHash and fix integration test compilation
- Update default.nix vendorHash to match current go.mod dependencies
- Fix NewSQLiteStorage calls to include required context.Context parameter
- Rename duplicate runCmd to runGitCmd in routing_integration_test.go

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 22:18:10 -08:00
Steve Yegge
1e20d702f2 fix(doctor): include tombstones in getCurrentJSONLIDs to prevent corruption (#552)
The previous bd-in7q fix had backwards logic - by EXCLUDING tombstones
from currentIDs, they appeared missing when compared to historicalIDs,
causing HydrateDeletionsManifest to erroneously add them to deletions.jsonl.

This corruption manifested when:
1. Issues were migrated to tombstones via migrate-tombstones
2. Doctor hydration ran (directly or via sync)
3. Tombstones were seen as deleted and re-added to deletions.jsonl
4. Next import skipped thousands of issues with in deletions manifest

Fix: Include ALL issues (including tombstones) in currentIDs. Tombstones
represent migrated deletions that ARE accounted for - they should not
trigger new deletion records.

Generated with Claude Code

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 17:33:07 -08:00
Steve Yegge
8569259cf3 chore: close bd-er7r (GH#509 fix) 2025-12-14 17:29:47 -08:00
Steve Yegge
0dd8914619 chore: sync beads - close bd-0yzm 2025-12-14 17:24:14 -08:00
Steve Yegge
fb20e43f5f fix(orphan): handle prefixes with dots in orphan detection (GH#508)
The orphan detection was incorrectly flagging issues with dots in their
prefix (e.g., "my.project-abc123") as orphans because it was looking for
any dot in the ID, treating everything before the first dot as the
parent ID.

The fix:
- Add IsHierarchicalID() helper that correctly detects hierarchical IDs
  by checking if the ID ends with .{digits} (e.g., "bd-abc.1")
- Update SQL query in orphan detection migration to use GLOB patterns
  that only match IDs ending with numeric suffixes
- Update all Go code that checks for hierarchical IDs to use the new
  helper function

Test cases added:
- Unit tests for IsHierarchicalID covering normal, dotted prefix, and
  edge cases
- Integration test verifying dotted prefixes do not trigger false
  positives

Fixes: #508
2025-12-14 17:23:46 -08:00
Steve Yegge
f2b7925dee chore: sync beads changes 2025-12-14 17:21:10 -08:00
Steve Yegge
69d14e21d8 fix(git): find .beads from nested worktrees (GH#509)
When worktrees are nested under the main repo (e.g.,
/project/.worktrees/feature/), bd now correctly finds .beads/ in the
parent repo.

The fix simplifies GetMainRepoRoot() to use `git rev-parse --git-common-dir`
which always returns the main repo's .git directory, regardless of whether
we're in a regular repo, a worktree, or a nested worktree.

- Simplified GetMainRepoRoot() implementation
- Added tests for nested worktree scenarios
- Updated CHANGELOG.md

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 17:20:46 -08:00
Steve Yegge
50608ce3a5 chore: close bd-6xfz (GH#517 fix) 2025-12-14 17:19:46 -08:00
Steve Yegge
76568e8802 fix(prime): document priority format to prevent Claude using 'medium'
GH#517: Claude uses 'medium' instead of P2/2 for priority, causing
infinite error loops. The bd prime output didn't show the --priority
flag or explain the valid format.

Fix: Add --priority=2 to the create example and add a clear note
explaining that priority must be 0-4 or P0-P4, NOT 'high/medium/low'.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 17:19:06 -08:00
Steve Yegge
0e70c813c7 chore: bd sync complete 2025-12-14 16:54:53 -08:00
Steve Yegge
59e9664284 chore: finalize beads sync state 2025-12-14 16:54:34 -08:00
Steve Yegge
c678de0fea chore: clean beads state before sync 2025-12-14 16:54:05 -08:00
Steve Yegge
33627567f1 chore: force clean wrong-prefix entries 2025-12-14 16:53:32 -08:00
Steve Yegge
114ae4c269 chore: purge wrong-prefix entries from deletions.jsonl 2025-12-14 16:51:59 -08:00
Steve Yegge
509d96e58a chore: sync beads 2025-12-14 16:50:24 -08:00
Steve Yegge
48697663d8 chore: clean up beads sync state 2025-12-14 16:49:25 -08:00
Steve Yegge
80c9395ea3 chore: clean beads state 2025-12-14 16:48:49 -08:00
Steve Yegge
768db19635 chore: clean up orphaned issues and sync beads state 2025-12-14 16:43:53 -08:00
Steve Yegge
58a5b4a54f chore: sync beads state after preflight fix 2025-12-14 16:42:15 -08:00
Steve Yegge
eed8587208 chore: cleanup orphaned issues and sync beads 2025-12-14 16:42:09 -08:00
Steve Yegge
aa1e8db78f chore: sync beads 2025-12-14 16:41:06 -08:00
Steve Yegge
e8d5acd77d chore: migrate tombstones to inline format 2025-12-14 16:40:23 -08:00
Steve Yegge
6c2c37ec52 chore: sync beads after sanitization 2025-12-14 16:39:53 -08:00
Steve Yegge
9f57db9103 chore: sync beads state after import fix 2025-12-14 16:39:33 -08:00
Steve Yegge
e6c6581b65 chore: sync beads after prefix fix 2025-12-14 16:39:04 -08:00
Steve Yegge
aa89c43573 chore: sync beads after preflight fix 2025-12-14 16:38:05 -08:00
Steve Yegge
e5f185875e chore: sanitize beads after sync 2025-12-14 15:24:08 -08:00
Steve Yegge
8a7b9afea3 chore: sync beads changes 2025-12-14 15:23:35 -08:00
Steve Yegge
43addba194 chore: sync issues after lockfile test coverage 2025-12-14 15:22:30 -08:00
Steve Yegge
6f3309b304 test(lockfile): improve coverage from 42% to 98%
- Add TestTryDaemonLock with 6 test cases for lock detection scenarios
- Add TestFlockFunctions for blocking/non-blocking lock operations
- Add TestIsProcessRunning for process detection edge cases
- Fix TestCheckPIDFile/current_process_is_running (was using invalid PID encoding)

Closes bd-9w3s
2025-12-14 15:21:29 -08:00
Steve Yegge
d7a813c045 chore: sync issues.jsonl after PR #555 merge 2025-12-14 15:13:34 -08:00
Steve Yegge
f1e5a6206f feat(mcp): Add compaction config and extended context engineering docs
- Extended CONTEXT_ENGINEERING.md with additional optimization strategies
- Added compaction configuration support to MCP server
- Added tests for compaction config and MCP compaction

Amp-Thread-ID: https://ampcode.com/threads/T-019b1f07-daa0-750c-878f-20bcc2d24f50
Co-authored-by: Amp <amp@ampcode.com>
2025-12-14 15:12:43 -08:00
Steve Yegge
a60972cd6a Merge remote-tracking branch 'origin/main' into performance-fix 2025-12-14 14:53:30 -08:00
mahawi1992
700dca22b0 feat(mcp): Add context engineering optimizations (#481)
Reduce context window usage by ~80-90% through:

1. Lazy Tool Schema Loading
   - discover_tools(): List tool names only (~500 bytes vs ~15KB)
   - get_tool_info(name): Get specific tool details on-demand

2. Minimal Issue Models
   - IssueMinimal: Lightweight model for list views (~80 bytes vs ~400 bytes)
   - Full Issue model preserved for show() command

3. Result Compaction
   - Auto-compact results with >20 issues
   - Returns preview (5 items) + total count + hint
   - Prevents unbounded context growth

4. Documentation
   - Updated CONTEXT_ENGINEERING.md with patterns and examples

Context savings:
- Tool schemas: 97% reduction (15KB → 500 bytes)
- List 50 issues: 80% reduction (20KB → 4KB)
- Ready work: 80% reduction (4KB → 800 bytes)

Inspired by MCP Bridge (github.com/mahawi1992/mwilliams_mcpbridge)
and Manus context engineering patterns.

Co-authored-by: Heal Smartly <marty@MacBook-Pro.local>
2025-12-14 14:21:22 -08:00
cbro
2651620a4c fix(storage): persist close_reason to issues table on close (#551)
CloseIssue was storing the reason only in the events table, not in the
issues.close_reason column. This caused `bd show --json` to return an
empty close_reason even when one was provided.

- Update CloseIssue in queries.go and transaction.go to set close_reason
- Clear close_reason when reopening issues (in manageClosedAt)
- Add tests for close_reason in storage and CLI JSON output
- Document the dual-storage of close_reason (issues + events tables)
2025-12-14 14:18:01 -08:00
Steve Yegge
3a4da4e08d fix(lint): address errcheck and De Morgan's law violations in doctor/fix
- Handle file.Close() errors in deletions.go and deletions_test.go
- Simplify boolean logic to apply De Morgan's law in common.go
- All golangci-lint checks now pass
2025-12-14 14:12:13 -08:00
matt wilkie
a22d949cbd Fix bd-in7q: prevent migrate-tombstones from corrupting deletions manifest (#554)
Root cause: bd doctor hydrate was re-adding migrated tombstones to the
deletions manifest because getCurrentJSONLIDs() included all issues,
including tombstones. When compared against git history, tombstones
appeared as 'deleted' and were incorrectly added to the manifest as new
deletions, corrupting the database on next sync.

Fix: Skip tombstone-status issues in getCurrentJSONLIDs() so they don't
participate in deletion detection. Tombstones represent already-recorded
deletions/migrations and shouldn't be treated as active issues.

Changes:
- cmd/bd/doctor/fix/deletions.go: Skip tombstones in getCurrentJSONLIDs()
- cmd/bd/doctor/fix/deletions_test.go: New tests for tombstone skipping
- cmd/bd/migrate_tombstones_test.go: Test that tombstones are valid

This fixes the bug where 'bd migrate-tombstones' followed by 'bd sync'
would add thousands of deletion records with author 'bd-doctor-hydrate'
2025-12-14 14:11:27 -08:00
Ryan Snodgrass
f88a0d015b feat(cli): add 'bd thanks' command to thank contributors
Adds a new command that displays a thank you page listing all human
contributors to the beads project. Features:

- Static list of contributors (compiled into binary)
- Top 20 featured contributors displayed in columns
- Additional contributors in wrapped list
- Styled output using lipgloss (colored box, sections)
- Dynamic width based on content
- JSON output support (--json flag)
- Excludes bots and AI agents by email pattern
2025-12-14 12:40:32 -08:00
Steve Yegge
3a9749279a fix(sync): protect locally exported issues from sanitization (bd-3ee1)
The sync sanitize process was incorrectly removing newly created issues
when they happened to have IDs matching entries in the deletions manifest.
This could occur with hash-based IDs when content is similar to previously
deleted issues.

The fix adds protection for issues that were in the left snapshot (local
export before pull). These represent local work and should not be removed
by sanitize, even if they match entries in the deletions manifest.

Changes:
- Load left snapshot in sanitizeJSONLWithDeletions() to build protection set
- Add protection check before removing issues from JSONL
- Add ProtectedCount/ProtectedIDs to SanitizeResult for tracking
- Log protected issues during sync for visibility
- Add comprehensive test coverage for the fix

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 00:55:55 -08:00
Steve Yegge
c125dc617d chore: bd-3ee1 is P0 (sanitize data loss bug) 2025-12-14 00:47:47 -08:00
Steve Yegge
70d09be1bc chore: upgrade bd-3ee1 to P0 2025-12-14 00:46:41 -08:00
Steve Yegge
a61ca252ae fix(cleanup): resolve CHECK constraint failure and add tombstone pruning
- Fix bd-tnsq: executeDelete now sets closed_at=NULL when creating
  tombstones, satisfying the CHECK constraint that requires
  closed_at IS NULL when status != 'closed'

- Fix bd-08ea: cleanup command now also prunes expired tombstones
  (older than 30 days) after converting closed issues to tombstones

- Add regression test for batch deletion of closed issues

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 00:37:54 -08:00
Steve Yegge
bb2e4f6fbf Merge pull request #549 from steveyegge/fix/nodb-mode-547
fix(memory): implement GetReadyWork/GetBlockedIssues + child counters
2025-12-14 00:28:37 -08:00
Steve Yegge
21e276dfad Merge remote-tracking branch 'origin/main' into fix/nodb-mode-547 2025-12-14 00:28:25 -08:00
Steve Yegge
9db756f8b6 fix(memory): implement GetReadyWork/GetBlockedIssues + child counters
Fixes #543, #544, #545, #546 (no-db mode regressions)

Memory backend fixes:
- GetReadyWork now properly excludes issues with open blocks dependencies
- GetBlockedIssues now includes issues with status=blocked (even with 0 blockers)
- LoadFromIssues initializes hierarchical child counters from existing IDs
  so repeated --parent creates bd-xxx.1, bd-xxx.2, etc.

JSONL path discovery:
- findJSONLPath works in no-db mode when dbPath is empty
- Honors BEADS_JSONL environment variable override
- Falls back to locating .beads directory

Based on PR #547 by @joelklabo - cherry-picked core fixes.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 23:22:10 -08:00
Steve Yegge
7f843a6105 chore: remove 12 orphaned child issues from JSONL
Orphaned issues (children of deleted epics):
- bd-cb64c226.1, .6, .8, .9, .10, .12, .13 (cache removal epic)
- bd-cbed9619.1, .2, .3, .4, .5 (N-way collision epic)

These were completed tasks from October 2025 that became orphans
when their parent epics were deleted.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 23:04:30 -08:00
Steve Yegge
dffb56299a chore: add 12 orphaned issues to deletions manifest
Added tombstones for orphaned child issues whose parent epics were deleted:
- bd-cb64c226.1, .6, .8, .9, .10, .12, .13 (cache removal epic)
- bd-cbed9619.1, .2, .3, .4, .5 (N-way collision epic)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 22:57:17 -08:00
Steve Yegge
4c985d7d3b chore: remove 12 orphaned issues (bd-cb64c226.* and bd-cbed9619.*) 2025-12-13 22:55:47 -08:00
Steve Yegge
89d97d4ccb chore: sync beads issues 2025-12-13 21:28:23 -08:00
Steve Yegge
ae7cd934a8 fix(ci): restore Windows smoke tests (reverted by #478)
PR #478 (worktree compatibility) accidentally reverted commit d1bd7ac
which changed Windows CI from full test suite to smoke tests only.

The full test suite times out on Windows due to slow filesystem I/O.
Linux runs comprehensive tests; Windows just verifies the binary works.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-13 21:28:23 -08:00