Phase 4: Remove deprecated edge fields from Issue struct (Decision 004)
This is the final phase of the Edge Schema Consolidation. It removes the deprecated edge fields (RepliesTo, RelatesTo, DuplicateOf, SupersededBy) from the Issue struct and all related code. Changes: - Remove edge fields from types.Issue struct - Remove edge field scanning from queries.go and transaction.go - Update graph_links_test.go to use dependency API exclusively - Update relate.go to use AddDependency/RemoveDependency - Update show.go with helper functions for thread traversal via deps - Update mail_test.go to verify thread links via dependencies - Add migration 022 to drop columns from issues table - Fix cycle detection to allow bidirectional relates-to links - Fix migration 022 to disable foreign keys before table recreation All edge relationships now use the dependencies table exclusively. The old Issue fields are fully removed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
{"id":"bd-1tw","title":"Fix G104 errors unhandled in internal/storage/sqlite/queries.go:1186","description":"Linting issue: G104: Errors unhandled (gosec) at internal/storage/sqlite/queries.go:1186:2. Error: rows.Close()","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-07T15:35:13.051671889-07:00","updated_at":"2025-12-17T23:13:40.53486-08:00","closed_at":"2025-12-17T16:46:11.0289-08:00"}
|
||||
{"id":"bd-20j","title":"sync branch not match config","description":"./bd sync\n→ Exporting pending changes to JSONL...\n→ No changes to commit\n→ Pulling from sync branch 'gh-386'...\nError pulling from sync branch: failed to create worktree: failed to create worktree parent directory: mkdir /var/home/matt/dev/beads/worktree-db-fail/.git: not a directory\nmatt@blufin-framation ~/d/b/worktree-db-fail (worktree-db-fail) [1]\u003e bd config list\n\nConfiguration:\n auto_compact_enabled = false\n compact_batch_size = 50\n compact_model = claude-3-5-haiku-20241022\n compact_parallel_workers = 5\n compact_tier1_days = 30\n compact_tier1_dep_levels = 2\n compact_tier2_commits = 100\n compact_tier2_days = 90\n compact_tier2_dep_levels = 5\n compaction_enabled = false\n issue_prefix = worktree-db-fail\n sync.branch = worktree-db-fail","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-08T06:49:04.449094018-07:00","updated_at":"2025-12-08T06:49:04.449094018-07:00"}
|
||||
{"id":"bd-28db","title":"Add 'bd status' command for issue database overview","description":"Implement a bd status command that provides a quick snapshot of the issue database state, similar to how git status shows working tree state.\n\nExpected output: Show summary including counts by state (open, in-progress, blocked, closed), recent activity (last 7 days), and quick overview without needing multiple queries.\n\nExample output showing issue counts, recent activity stats, and pointer to bd list for details.\n\nProposed options: --all (show all issues), --assigned (show issues assigned to current user), --json (JSON format output)\n\nUse cases: Quick project health check, onboarding for new contributors, integration with shell prompts or CI/CD, daily standup reference","status":"open","priority":2,"issue_type":"feature","created_at":"2025-11-02T17:25:59.203549-08:00","updated_at":"2025-11-02T17:25:59.203549-08:00"}
|
||||
{"id":"bd-2oo","title":"Edge Schema Consolidation: Unify all edges in dependencies table","description":"Consolidate all edge types into the dependency table per decision 004.\n\n## Changes\n- Add metadata column to dependencies table\n- Add thread_id column for conversation grouping\n- Remove redundant Issue fields: replies_to, relates_to, duplicate_of, superseded_by\n- Update all code to use dependencies API\n- Migration script for existing data\n- JSONL format change (breaking)\n\nReference: ~/gt/hop/decisions/004-edge-schema-consolidation.md","status":"open","priority":0,"issue_type":"epic","created_at":"2025-12-18T02:01:48.785558-08:00","updated_at":"2025-12-18T02:01:48.785558-08:00"}
|
||||
{"id":"bd-2q6d","title":"Beads commands operate on stale database without warning","description":"All beads read operations should validate database is in sync with JSONL before proceeding.\n\n**Current Behavior:**\n- Commands can query/read from stale database\n- Only mutation operations (like 'bd sync') check if JSONL is newer\n- User gets incorrect results without realizing database is out of sync\n\n**Expected Behavior:**\n- All beads commands should have pre-flight check for database freshness\n- If JSONL is newer than database, refuse to operate with error: \"Database out of sync. Run 'bd import' first.\"\n- Same safety check that exists for 'bd sync' should apply to ALL operations\n\n**Impact:**\n- Users make decisions based on incomplete/outdated data\n- Silent failures lead to confusion (e.g., thinking issues don't exist when they do)\n- Similar to running git commands on stale repo without being warned to pull\n\n**Example:**\n- Searched for bd-g9eu issue file: not found\n- Issue exists in .beads/issues.jsonl (in git)\n- Database was stale, but no warning was given\n- Led to incorrect conclusion that issue was already closed/deleted","notes":"## Implementation Complete\n\n**Phase 1: Created staleness check (cmd/bd/staleness.go)**\n- ensureDatabaseFresh() function checks JSONL mtime vs last_import_time\n- Returns error with helpful message when database is stale\n- Auto-skips in daemon mode (daemon has auto-import)\n\n**Phase 2: Added to all read commands**\n- list, show, ready, status, stale, info, duplicates, validate\n- Check runs before database queries in direct mode\n- Daemon mode already protected via checkAndAutoImportIfStale()\n\n**Phase 3: Code Review Findings**\nSee follow-up issues:\n- bd-XXXX: Add warning when staleness check errors\n- bd-YYYY: Improve CheckStaleness error handling\n- bd-ZZZZ: Refactor redundant daemon checks (low priority)\n\n**Testing:**\n- Build successful: go build ./cmd/bd\n- Binary works: ./bd --version\n- Ready for manual testing\n\n**Next Steps:**\n1. Test with stale database scenario\n2. Implement review improvements\n3. Close issue when tests pass","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-11-20T19:33:40.019297-05:00","updated_at":"2025-12-17T23:13:40.535149-08:00","closed_at":"2025-12-17T19:11:12.982639-08:00"}
|
||||
{"id":"bd-379","title":"Implement `bd setup cursor` for Cursor IDE integration","description":"Create a `bd setup cursor` command that integrates Beads workflow into Cursor IDE via .cursorrules file. Unlike Claude Code (which has hooks), Cursor uses a static rules file to provide context to its AI.","status":"open","priority":3,"issue_type":"feature","created_at":"2025-11-11T23:32:22.170083-08:00","updated_at":"2025-11-11T23:32:22.170083-08:00"}
|
||||
{"id":"bd-3852","title":"Add orphan detection migration","description":"Create migration to detect orphaned children in existing databases. Query: SELECT id FROM issues WHERE id LIKE '%.%' AND substr(id, 1, instr(id || '.', '.') - 1) NOT IN (SELECT id FROM issues). Log results, let user decide action (delete orphans or convert to top-level).","status":"open","priority":2,"issue_type":"task","created_at":"2025-11-04T12:32:30.727044-08:00","updated_at":"2025-11-04T12:32:30.727044-08:00"}
|
||||
@@ -80,18 +81,18 @@
|
||||
{"id":"bd-bxha","title":"Default to YES for git hooks and merge driver installation","description":"Currently bd init prompts user to install git hooks and merge driver, but setup is incomplete if user declines. Change to install by default unless --skip-hooks or --skip-merge-driver flags are passed. Better safe defaults. If installation fails, warn user and suggest bd doctor --fix.","status":"open","priority":1,"issue_type":"feature","created_at":"2025-11-21T23:16:10.172238-08:00","updated_at":"2025-11-21T23:16:28.369137-08:00","dependencies":[{"issue_id":"bd-bxha","depends_on_id":"bd-tbz3","type":"parent-child","created_at":"2025-11-21T23:16:10.173034-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-c3u","title":"Review PR #512: clarify bd ready docs","description":"Review and merge PR #512 from aspiers. This PR clarifies what bd ready does after git pull in README.md. Simple 1-line change. URL: https://github.com/anthropics/beads/pull/512","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-13T08:15:13.405161+11:00","updated_at":"2025-12-13T07:07:29.641265-08:00","closed_at":"2025-12-13T07:07:29.641265-08:00"}
|
||||
{"id":"bd-c83r","title":"Prevent multiple daemons from running on the same repo","description":"Multiple bd daemons running on the same repo clone causes race conditions and data corruption risks.\n\n**Problem:**\n- Nothing prevents spawning multiple daemons for the same repository\n- Multiple daemons watching the same files can conflict during sync operations\n- Observed: 4 daemons running simultaneously caused sync race condition\n\n**Solution:**\nImplement daemon singleton enforcement per repo:\n1. Use a lock file (e.g., .beads/.daemon.lock) with PID\n2. On daemon start, check if lock exists and process is alive\n3. If stale lock (dead PID), clean up and acquire lock\n4. If active daemon exists, either:\n - Exit with message 'daemon already running (PID xxx)'\n - Or offer --replace flag to kill existing and take over\n5. Release lock on graceful shutdown\n\n**Edge cases to handle:**\n- Daemon crashes without releasing lock (stale PID detection)\n- Multiple repos in same directory tree (each repo gets own lock)\n- Race between two daemons starting simultaneously (atomic lock acquisition)","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-13T06:37:23.377131-08:00","updated_at":"2025-12-16T01:14:49.50347-08:00","closed_at":"2025-12-14T17:34:14.990077-08:00"}
|
||||
{"id":"bd-cb64c226.1","title":"Performance Validation","description":"Confirm no performance regression from cache removal","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-28T10:50:15.126019-07:00","updated_at":"2025-12-17T22:59:13.637153-08:00","closed_at":"2025-12-17T22:59:13.637153-08:00","close_reason":"Closed"}
|
||||
{"id":"bd-cb64c226.10","title":"Delete server_cache_storage.go","description":"Remove the entire cache implementation file (~286 lines)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-27T22:55:38.729299-07:00","updated_at":"2025-12-17T22:59:13.638098-08:00","closed_at":"2025-12-17T22:59:13.638098-08:00","close_reason":"Closed"}
|
||||
{"id":"bd-cb64c226.12","title":"Remove Storage Cache from Server Struct","description":"Eliminate cache fields and use s.storage directly","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-27T22:55:25.474412-07:00","updated_at":"2025-12-17T22:59:13.638663-08:00","closed_at":"2025-12-17T22:59:13.638663-08:00","close_reason":"Closed"}
|
||||
{"id":"bd-cb64c226.13","title":"Audit Current Cache Usage","description":"**Summary:** Comprehensive audit of storage cache usage revealed minimal dependency across server components, with most calls following a consistent pattern. Investigation confirmed cache was largely unnecessary in single-repository daemon architecture.\n\n**Key Decisions:** \n- Remove all cache-related environment variables\n- Delete server struct cache management fields\n- Eliminate cache-specific test files\n- Deprecate req.Cwd routing logic\n\n**Resolution:** Cache system will be completely removed, simplifying server storage access and reducing unnecessary complexity with negligible performance impact.","notes":"AUDIT COMPLETE\n\ngetStorageForRequest() callers: 17 production + 11 test\n- server_issues_epics.go: 8 calls\n- server_labels_deps_comments.go: 4 calls \n- server_export_import_auto.go: 2 calls\n- server_compact.go: 2 calls\n- server_routing_validation_diagnostics.go: 1 call\n- server_eviction_test.go: 11 calls (DELETE entire file)\n\nPattern everywhere: store, err := s.getStorageForRequest(req) → store := s.storage\n\nreq.Cwd usage: Only for multi-repo routing. Local daemon always serves 1 repo, so routing is unused.\n\nMCP server: Uses separate daemons per repo (no req.Cwd usage found). NOT affected by cache removal.\n\nCache env vars to deprecate:\n- BEADS_DAEMON_MAX_CACHE_SIZE (used in server_core.go:63)\n- BEADS_DAEMON_CACHE_TTL (used in server_core.go:72)\n- BEADS_DAEMON_MEMORY_THRESHOLD_MB (used in server_cache_storage.go:47)\n\nServer struct fields to remove:\n- storageCache, cacheMu, maxCacheSize, cacheTTL, cleanupTicker, cacheHits, cacheMisses\n\nTests to delete:\n- server_eviction_test.go (entire file - 9 tests)\n- limits_test.go cache assertions\n\nSpecial consideration: ValidateDatabase endpoint uses findDatabaseForCwd() outside cache. Verify if used, then remove or inline.\n\nSafe to proceed with removal - cache always had 1 entry in local daemon model.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-27T22:55:19.3723-07:00","updated_at":"2025-12-17T22:59:13.639153-08:00","closed_at":"2025-12-17T22:59:13.639153-08:00","close_reason":"Closed"}
|
||||
{"id":"bd-cb64c226.6","title":"Verify MCP Server Compatibility","description":"Ensure MCP server works with cache-free daemon","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-27T22:56:03.241615-07:00","updated_at":"2025-12-17T22:59:13.63959-08:00","closed_at":"2025-12-17T22:59:13.63959-08:00","close_reason":"Closed"}
|
||||
{"id":"bd-cb64c226.8","title":"Update Metrics and Health Endpoints","description":"Remove cache-related metrics from health/metrics endpoints","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-27T22:55:49.212047-07:00","updated_at":"2025-12-17T22:59:13.640049-08:00","closed_at":"2025-12-17T22:59:13.640049-08:00","close_reason":"Closed"}
|
||||
{"id":"bd-cb64c226.9","title":"Remove Cache-Related Tests","description":"Delete or update tests that assume multi-repo caching","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-27T22:55:44.511897-07:00","updated_at":"2025-12-17T22:59:13.640441-08:00","closed_at":"2025-12-17T22:59:13.640441-08:00","close_reason":"Closed"}
|
||||
{"id":"bd-cbed9619.1","title":"Fix multi-round convergence for N-way collisions","description":"**Summary:** Multi-round collision resolution was identified as a critical issue preventing complete synchronization across distributed clones. The problem stemmed from incomplete final pulls that didn't fully propagate all changes between system instances.\n\n**Key Decisions:**\n- Implement multi-round sync mechanism\n- Ensure bounded convergence (≤N rounds)\n- Guarantee idempotent import without data loss\n\n**Resolution:** Developed a sync strategy that ensures all clones converge to the same complete set of issues, unblocking the bd-cbed9619 epic and improving distributed system reliability.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-28T21:22:21.486109-07:00","updated_at":"2025-12-17T22:59:13.640844-08:00","closed_at":"2025-12-17T22:59:13.640844-08:00","close_reason":"Closed"}
|
||||
{"id":"bd-cbed9619.2","title":"Implement content-first idempotent import","description":"**Summary:** Refactored issue import to be content-first and idempotent, ensuring consistent data synchronization across multiple import rounds by prioritizing content hash matching over ID-based updates.\n\n**Key Decisions:** \n- Implement content hash as primary matching mechanism\n- Create global collision resolution algorithm\n- Ensure importing same data multiple times results in no-op\n\n**Resolution:** The new import strategy guarantees predictable convergence across distributed systems, solving rename detection and collision handling while maintaining data integrity during multi-stage imports.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-28T18:38:25.671302-07:00","updated_at":"2025-12-17T22:59:13.641263-08:00","closed_at":"2025-12-17T22:59:13.641263-08:00","close_reason":"Closed","dependencies":[{"issue_id":"bd-cbed9619.2","depends_on_id":"bd-cbed9619.5","type":"blocks","created_at":"2025-10-28T18:39:28.360026-07:00","created_by":"daemon"},{"issue_id":"bd-cbed9619.2","depends_on_id":"bd-cbed9619.4","type":"blocks","created_at":"2025-10-28T18:39:28.383624-07:00","created_by":"daemon"},{"issue_id":"bd-cbed9619.2","depends_on_id":"bd-cbed9619.3","type":"blocks","created_at":"2025-10-28T18:39:28.407157-07:00","created_by":"daemon"}]}
|
||||
{"id":"bd-cbed9619.3","title":"Implement global N-way collision resolution algorithm","description":"**Summary:** Replaced pairwise collision resolution with a global N-way algorithm that deterministically resolves issue ID conflicts across multiple clones. The new approach groups collisions, deduplicates by content hash, and assigns sequential IDs to ensure consistent synchronization.\n\n**Key Decisions:**\n- Use content hash for global, stable sorting\n- Group collisions by base ID\n- Assign sequential IDs based on sorted unique versions\n- Eliminate order-dependent remapping logic\n\n**Resolution:** Implemented ResolveNWayCollisions function that guarantees deterministic issue ID assignment across multiple synchronization scenarios, solving the core challenge of maintaining consistency in distributed systems with potential conflicts.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-28T18:37:42.85616-07:00","updated_at":"2025-12-17T22:59:13.64168-08:00","closed_at":"2025-12-17T22:59:13.64168-08:00","close_reason":"Closed","dependencies":[{"issue_id":"bd-cbed9619.3","depends_on_id":"bd-cbed9619.5","type":"blocks","created_at":"2025-10-28T18:39:28.30886-07:00","created_by":"daemon"},{"issue_id":"bd-cbed9619.3","depends_on_id":"bd-cbed9619.4","type":"blocks","created_at":"2025-10-28T18:39:28.336312-07:00","created_by":"daemon"}]}
|
||||
{"id":"bd-cbed9619.4","title":"Make DetectCollisions read-only (separate detection from modification)","description":"**Summary:** The project restructured the collision detection process in the database to separate read-only detection from state modification, eliminating race conditions and improving system reliability. This was achieved by introducing a two-phase approach: first detecting potential collisions, then applying resolution separately.\n\n**Key Decisions:**\n- Create read-only DetectCollisions method\n- Add RenameDetail to track potential issue renames\n- Implement atomic ApplyCollisionResolution function\n- Separate detection logic from database modification\n\n**Resolution:** The refactoring creates a more robust, composable collision handling mechanism that prevents partial failures and maintains database consistency during complex issue import scenarios.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-28T18:37:09.652326-07:00","updated_at":"2025-12-17T22:59:13.642212-08:00","closed_at":"2025-12-17T22:59:13.642212-08:00","close_reason":"Closed","dependencies":[{"issue_id":"bd-cbed9619.4","depends_on_id":"bd-cbed9619.5","type":"blocks","created_at":"2025-10-28T18:39:28.285653-07:00","created_by":"daemon"}]}
|
||||
{"id":"bd-cbed9619.5","title":"Add content-addressable identity to Issue type","description":"**Summary:** Added content-addressable identity to Issue type by implementing a ContentHash field that generates a unique SHA256 fingerprint based on semantic issue content. This resolves issue identification challenges when multiple system instances create issues with identical IDs but different contents.\n\n**Key Decisions:**\n- Use SHA256 for content hashing\n- Hash excludes ID and timestamps\n- Compute hash automatically at creation/import time\n- Add database column for hash storage\n\n**Resolution:** Successfully implemented a deterministic content hashing mechanism that enables reliable issue identification across distributed systems, improving data integrity and collision detection.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-28T18:36:44.914967-07:00","updated_at":"2025-12-17T22:59:13.642625-08:00","closed_at":"2025-12-17T22:59:13.642625-08:00","close_reason":"Closed"}
|
||||
{"id":"bd-cb64c226.1","title":"Performance Validation","description":"Confirm no performance regression from cache removal","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-10-28T10:50:15.126019-07:00","updated_at":"2025-12-17T23:18:29.108883-08:00","close_reason":"Closed","deleted_at":"2025-12-17T23:18:29.108883-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
|
||||
{"id":"bd-cb64c226.10","title":"Delete server_cache_storage.go","description":"Remove the entire cache implementation file (~286 lines)","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-10-27T22:55:38.729299-07:00","updated_at":"2025-12-17T23:18:29.110716-08:00","close_reason":"Closed","deleted_at":"2025-12-17T23:18:29.110716-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
|
||||
{"id":"bd-cb64c226.12","title":"Remove Storage Cache from Server Struct","description":"Eliminate cache fields and use s.storage directly","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-10-27T22:55:25.474412-07:00","updated_at":"2025-12-17T23:18:29.111039-08:00","close_reason":"Closed","deleted_at":"2025-12-17T23:18:29.111039-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
|
||||
{"id":"bd-cb64c226.13","title":"Audit Current Cache Usage","description":"**Summary:** Comprehensive audit of storage cache usage revealed minimal dependency across server components, with most calls following a consistent pattern. Investigation confirmed cache was largely unnecessary in single-repository daemon architecture.\n\n**Key Decisions:** \n- Remove all cache-related environment variables\n- Delete server struct cache management fields\n- Eliminate cache-specific test files\n- Deprecate req.Cwd routing logic\n\n**Resolution:** Cache system will be completely removed, simplifying server storage access and reducing unnecessary complexity with negligible performance impact.","notes":"AUDIT COMPLETE\n\ngetStorageForRequest() callers: 17 production + 11 test\n- server_issues_epics.go: 8 calls\n- server_labels_deps_comments.go: 4 calls \n- server_export_import_auto.go: 2 calls\n- server_compact.go: 2 calls\n- server_routing_validation_diagnostics.go: 1 call\n- server_eviction_test.go: 11 calls (DELETE entire file)\n\nPattern everywhere: store, err := s.getStorageForRequest(req) → store := s.storage\n\nreq.Cwd usage: Only for multi-repo routing. Local daemon always serves 1 repo, so routing is unused.\n\nMCP server: Uses separate daemons per repo (no req.Cwd usage found). NOT affected by cache removal.\n\nCache env vars to deprecate:\n- BEADS_DAEMON_MAX_CACHE_SIZE (used in server_core.go:63)\n- BEADS_DAEMON_CACHE_TTL (used in server_core.go:72)\n- BEADS_DAEMON_MEMORY_THRESHOLD_MB (used in server_cache_storage.go:47)\n\nServer struct fields to remove:\n- storageCache, cacheMu, maxCacheSize, cacheTTL, cleanupTicker, cacheHits, cacheMisses\n\nTests to delete:\n- server_eviction_test.go (entire file - 9 tests)\n- limits_test.go cache assertions\n\nSpecial consideration: ValidateDatabase endpoint uses findDatabaseForCwd() outside cache. Verify if used, then remove or inline.\n\nSafe to proceed with removal - cache always had 1 entry in local daemon model.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-10-27T22:55:19.3723-07:00","updated_at":"2025-12-17T23:18:29.111369-08:00","close_reason":"Closed","deleted_at":"2025-12-17T23:18:29.111369-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
|
||||
{"id":"bd-cb64c226.6","title":"Verify MCP Server Compatibility","description":"Ensure MCP server works with cache-free daemon","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-10-27T22:56:03.241615-07:00","updated_at":"2025-12-17T23:18:29.109644-08:00","close_reason":"Closed","deleted_at":"2025-12-17T23:18:29.109644-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
|
||||
{"id":"bd-cb64c226.8","title":"Update Metrics and Health Endpoints","description":"Remove cache-related metrics from health/metrics endpoints","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-10-27T22:55:49.212047-07:00","updated_at":"2025-12-17T23:18:29.110022-08:00","close_reason":"Closed","deleted_at":"2025-12-17T23:18:29.110022-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
|
||||
{"id":"bd-cb64c226.9","title":"Remove Cache-Related Tests","description":"Delete or update tests that assume multi-repo caching","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-10-27T22:55:44.511897-07:00","updated_at":"2025-12-17T23:18:29.110385-08:00","close_reason":"Closed","deleted_at":"2025-12-17T23:18:29.110385-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
|
||||
{"id":"bd-cbed9619.1","title":"Fix multi-round convergence for N-way collisions","description":"**Summary:** Multi-round collision resolution was identified as a critical issue preventing complete synchronization across distributed clones. The problem stemmed from incomplete final pulls that didn't fully propagate all changes between system instances.\n\n**Key Decisions:**\n- Implement multi-round sync mechanism\n- Ensure bounded convergence (≤N rounds)\n- Guarantee idempotent import without data loss\n\n**Resolution:** Developed a sync strategy that ensures all clones converge to the same complete set of issues, unblocking the bd-cbed9619 epic and improving distributed system reliability.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-10-28T21:22:21.486109-07:00","updated_at":"2025-12-17T23:18:29.111713-08:00","close_reason":"Closed","deleted_at":"2025-12-17T23:18:29.111713-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
|
||||
{"id":"bd-cbed9619.2","title":"Implement content-first idempotent import","description":"**Summary:** Refactored issue import to be content-first and idempotent, ensuring consistent data synchronization across multiple import rounds by prioritizing content hash matching over ID-based updates.\n\n**Key Decisions:** \n- Implement content hash as primary matching mechanism\n- Create global collision resolution algorithm\n- Ensure importing same data multiple times results in no-op\n\n**Resolution:** The new import strategy guarantees predictable convergence across distributed systems, solving rename detection and collision handling while maintaining data integrity during multi-stage imports.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-10-28T18:38:25.671302-07:00","updated_at":"2025-12-17T23:18:29.112032-08:00","close_reason":"Closed","dependencies":[{"issue_id":"bd-cbed9619.2","depends_on_id":"bd-cbed9619.5","type":"blocks","created_at":"2025-10-28T18:39:28.360026-07:00","created_by":"daemon"},{"issue_id":"bd-cbed9619.2","depends_on_id":"bd-cbed9619.4","type":"blocks","created_at":"2025-10-28T18:39:28.383624-07:00","created_by":"daemon"},{"issue_id":"bd-cbed9619.2","depends_on_id":"bd-cbed9619.3","type":"blocks","created_at":"2025-10-28T18:39:28.407157-07:00","created_by":"daemon"}],"deleted_at":"2025-12-17T23:18:29.112032-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
|
||||
{"id":"bd-cbed9619.3","title":"Implement global N-way collision resolution algorithm","description":"**Summary:** Replaced pairwise collision resolution with a global N-way algorithm that deterministically resolves issue ID conflicts across multiple clones. The new approach groups collisions, deduplicates by content hash, and assigns sequential IDs to ensure consistent synchronization.\n\n**Key Decisions:**\n- Use content hash for global, stable sorting\n- Group collisions by base ID\n- Assign sequential IDs based on sorted unique versions\n- Eliminate order-dependent remapping logic\n\n**Resolution:** Implemented ResolveNWayCollisions function that guarantees deterministic issue ID assignment across multiple synchronization scenarios, solving the core challenge of maintaining consistency in distributed systems with potential conflicts.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-10-28T18:37:42.85616-07:00","updated_at":"2025-12-17T23:18:29.112335-08:00","close_reason":"Closed","dependencies":[{"issue_id":"bd-cbed9619.3","depends_on_id":"bd-cbed9619.5","type":"blocks","created_at":"2025-10-28T18:39:28.30886-07:00","created_by":"daemon"},{"issue_id":"bd-cbed9619.3","depends_on_id":"bd-cbed9619.4","type":"blocks","created_at":"2025-10-28T18:39:28.336312-07:00","created_by":"daemon"}],"deleted_at":"2025-12-17T23:18:29.112335-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
|
||||
{"id":"bd-cbed9619.4","title":"Make DetectCollisions read-only (separate detection from modification)","description":"**Summary:** The project restructured the collision detection process in the database to separate read-only detection from state modification, eliminating race conditions and improving system reliability. This was achieved by introducing a two-phase approach: first detecting potential collisions, then applying resolution separately.\n\n**Key Decisions:**\n- Create read-only DetectCollisions method\n- Add RenameDetail to track potential issue renames\n- Implement atomic ApplyCollisionResolution function\n- Separate detection logic from database modification\n\n**Resolution:** The refactoring creates a more robust, composable collision handling mechanism that prevents partial failures and maintains database consistency during complex issue import scenarios.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-10-28T18:37:09.652326-07:00","updated_at":"2025-12-17T23:18:29.112637-08:00","close_reason":"Closed","dependencies":[{"issue_id":"bd-cbed9619.4","depends_on_id":"bd-cbed9619.5","type":"blocks","created_at":"2025-10-28T18:39:28.285653-07:00","created_by":"daemon"}],"deleted_at":"2025-12-17T23:18:29.112637-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
|
||||
{"id":"bd-cbed9619.5","title":"Add content-addressable identity to Issue type","description":"**Summary:** Added content-addressable identity to Issue type by implementing a ContentHash field that generates a unique SHA256 fingerprint based on semantic issue content. This resolves issue identification challenges when multiple system instances create issues with identical IDs but different contents.\n\n**Key Decisions:**\n- Use SHA256 for content hashing\n- Hash excludes ID and timestamps\n- Compute hash automatically at creation/import time\n- Add database column for hash storage\n\n**Resolution:** Successfully implemented a deterministic content hashing mechanism that enables reliable issue identification across distributed systems, improving data integrity and collision detection.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-10-28T18:36:44.914967-07:00","updated_at":"2025-12-17T23:18:29.112933-08:00","close_reason":"Closed","deleted_at":"2025-12-17T23:18:29.112933-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}
|
||||
{"id":"bd-crgr","title":"GH#517: Claude sets priority wrong on new install","description":"Claude uses 'medium/high/low' for priority instead of P0-P4. Update bd prime/onboard output to be clearer about priority syntax. See GitHub issue #517.","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-16T01:03:34.803084-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"}
|
||||
{"id":"bd-d148","title":"GH#483: Pre-commit hook fails unnecessarily when .beads removed","description":"Pre-commit hook fails on bd sync when .beads directory exists but user is on branch without beads. Should exit gracefully. See GitHub issue #483.","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-12-16T01:03:40.049785-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"}
|
||||
{"id":"bd-d3e5","title":"Test issue 2","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-14T11:21:13.878680387-07:00","updated_at":"2025-12-14T11:21:13.878680387-07:00","closed_at":"2025-12-14T00:32:13.890274-08:00"}
|
||||
@@ -119,12 +120,14 @@
|
||||
{"id":"bd-hlsw.4","title":"Sync branch integrity guards","description":"Track sync branch parent commit. If sync branch was force-pushed, warn user and require confirmation before proceeding. Add option to reset to remote if user accepts rebase. Prevents silent corruption from forced pushes.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-14T10:40:20.645402352-07:00","updated_at":"2025-12-14T10:40:20.645402352-07:00","dependencies":[{"issue_id":"bd-hlsw.4","depends_on_id":"bd-hlsw","type":"parent-child","created_at":"2025-12-14T10:40:20.646425761-07:00","created_by":"daemon"}]}
|
||||
{"id":"bd-hnkg","title":"GH#540: Add silent quick-capture mode (bd q)","description":"Add bd q alias for quick capture that outputs only issue ID. Useful for piping/scripting. See GitHub issue #540.","status":"tombstone","priority":2,"issue_type":"feature","created_at":"2025-12-16T01:03:38.260135-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"feature"}
|
||||
{"id":"bd-hy9p","title":"Add --body-file flag to bd create for reading descriptions from files","description":"## Problem\n\nCreating issues with long/complex descriptions via CLI requires shell escaping gymnastics:\n\n```bash\n# Current workaround - awkward heredoc quoting\nbd create --title=\"...\" --description=\"$(cat \u003c\u003c'EOF'\n...markdown...\nEOF\n)\"\n\n# Often fails with quote escaping errors in eval context\n# Agents resort to writing temp files then reading them\n```\n\n## Proposed Solution\n\nAdd `--body-file` and `--description-file` flags to read description from a file, matching `gh` CLI pattern.\n\n```bash\n# Natural pattern that aligns with training data\ncat \u003e /tmp/desc.md \u003c\u003c 'EOF'\n...markdown content...\nEOF\n\nbd create --title=\"...\" --body-file=/tmp/desc.md\n```\n\n## Implementation\n\n### 1. Add new flags to `bd create`\n\n```go\ncreateCmd.Flags().String(\"body-file\", \"\", \"Read description from file (use - for stdin)\")\ncreateCmd.Flags().String(\"description-file\", \"\", \"Alias for --body-file\")\n```\n\n### 2. Flag precedence\n\n- If `--body-file` or `--description-file` is provided, read from file\n- If value is `-`, read from stdin\n- Otherwise fall back to `--body` or `--description` flag\n- If neither provided, description is empty (current behavior)\n\n### 3. Error handling\n\n- File doesn't exist → clear error message\n- File not readable → clear error message\n- stdin specified but not available → clear error message\n\n## Benefits\n\n✅ **Matches training data**: `gh issue create --body-file file.txt` is a common pattern\n✅ **No shell escaping issues**: File content is read directly\n✅ **Works with any content**: Markdown, special characters, quotes, etc.\n✅ **Agent-friendly**: Agents already write complex content to temp files\n✅ **User-friendly**: Easier for humans too when pasting long descriptions\n\n## Related Commands\n\nConsider adding similar support to:\n- `bd update --body-file` (for updating descriptions)\n- `bd comment --body-file` (if/when we add comments)\n\n## Examples\n\n```bash\n# From file\nbd create --title=\"Add new feature\" --body-file=feature.md\n\n# From stdin\necho \"Quick description\" | bd create --title=\"Bug fix\" --body-file=-\n\n# With other flags\nbd create \\\n --title=\"Security issue\" \\\n --type=bug \\\n --priority=0 \\\n --body-file=security-report.md \\\n --label=security\n```\n\n## Testing\n\n- Test with normal files\n- Test with stdin (`-`)\n- Test with non-existent files (error handling)\n- Test with binary files (should handle gracefully)\n- Test with empty files (valid - empty description)\n- Test that `--description-file` and `--body-file` are equivalent aliases","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-11-22T00:02:08.762684-08:00","updated_at":"2025-12-17T23:13:40.536024-08:00","closed_at":"2025-12-17T17:28:52.505239-08:00"}
|
||||
{"id":"bd-in7","title":"Test message","description":"Hello world","status":"closed","priority":2,"issue_type":"message","assignee":"test-agent","created_at":"2025-12-17T23:16:13.184946-08:00","updated_at":"2025-12-18T00:35:08.403989-08:00","closed_at":"2025-12-17T23:37:38.563369-08:00"}
|
||||
{"id":"bd-io8c","title":"Improve test coverage for internal/syncbranch (33.0% → 70%)","description":"The syncbranch package has only 33.0% test coverage. This package handles git sync operations and is critical for data integrity.\n\nCurrent coverage: 33.0%\nTarget coverage: 70%","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-13T20:43:02.079145-08:00","updated_at":"2025-12-13T21:01:14.972533-08:00"}
|
||||
{"id":"bd-iq7n","title":"Audit and fix JSONL filename mismatches across all repo clones","description":"## Problem\n\nMultiple clones of repos are configured with different JSONL filenames (issues.jsonl vs beads.jsonl), causing:\n1. JSONL files to be resurrected after deletion (one clone pushes issues.jsonl, another pushes beads.jsonl)\n2. Agents unable to see issues filed by other agents after sync\n3. Merge conflicts and data inconsistencies\n\n## Root Cause\n\nWhen repos were \"bd doctored\" or initialized at different times, some got issues.jsonl (old default) and others got beads.jsonl (Beads repo specific). These clones push their respective files, creating duplicates.\n\n## Task\n\nScan all repo clones under ~/src/ (1-2 levels deep) and standardize their JSONL configuration.\n\n### Step 1: Find all beads-enabled repos\n\n```bash\n# Find all directories named 'beads' at levels 1-2 under ~/src/\nfind ~/src -maxdepth 2 -type d -name beads\n```\n\n### Step 2: For each repo found, check configuration\n\nFor each directory from Step 1, check:\n- Does `.beads/metadata.json` exist?\n- What is the `jsonl_export` value?\n- What JSONL files actually exist in `.beads/`?\n- Are there multiple JSONL files (problem!)?\n\n### Step 3: Create audit report\n\nGenerate a report showing:\n```\nRepo Path | Config | Actual Files | Status\n----------------------------------- | ------------- | ---------------------- | --------\n~/src/beads | beads.jsonl | beads.jsonl | OK\n~/src/dave/beads | issues.jsonl | issues.jsonl | MISMATCH\n~/src/emma/beads | issues.jsonl | issues.jsonl, beads.jsonl | DUPLICATE!\n```\n\n### Step 4: Determine canonical name for each repo\n\nFor repos that are the SAME git repository (check `git remote -v`):\n- Group them together\n- Determine which JSONL filename should be canonical (majority wins, or beads.jsonl for the beads repo itself)\n- List which clones need to be updated\n\n### Step 5: Generate fix script\n\nCreate a script that for each mismatched clone:\n1. Updates `.beads/metadata.json` to use the canonical name\n2. If JSONL file needs renaming: `git mv .beads/old.jsonl .beads/new.jsonl`\n3. Removes any duplicate JSONL files: `git rm .beads/duplicate.jsonl`\n4. Commits the change\n5. Syncs: `bd sync`\n\n### Expected Output\n\n1. Audit report showing all repos and their config status\n2. List of repos grouped by git remote (same repository)\n3. Fix script or manual instructions for standardizing each repo\n4. Verification that after fixes, all clones of the same repo use the same JSONL filename\n\n### Edge Cases\n\n- Handle repos without metadata.json (use default discovery)\n- Handle repos with no git remote (standalone/local)\n- Handle repos that are not git repositories\n- Don't modify repos with uncommitted changes (warn instead)\n\n### Success Criteria\n\n- All clones of the same git repository use the same JSONL filename\n- No duplicate JSONL files in any repo\n- All configurations documented in metadata.json\n- bd doctor passes on all repos","status":"closed","priority":0,"issue_type":"task","created_at":"2025-11-21T23:58:35.044762-08:00","updated_at":"2025-12-17T23:13:40.531403-08:00","closed_at":"2025-12-17T16:50:59.510972-08:00"}
|
||||
{"id":"bd-j3il","title":"Add bd reset command for clean slate restart","description":"Implement a command to reset beads to a clean starting state.\n\n**Context:** GitHub issue #479 - users sometimes get beads into an invalid state after updates, and there's no clean way to start fresh. The git backup/restore mechanism that protects against accidental deletion also makes it hard to intentionally reset.\n\n**Current workaround** (from maphew):\n```bash\nbd daemons killall\ngit rm .beads/*.jsonl\ngit commit -m 'remove old issues'\nrm .beads/*\nbd init\nbd onboard\n```\n\n**Desired:** A proper `bd reset` command that handles this cleanly and safely.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-13T08:41:34.956552+11:00","updated_at":"2025-12-13T08:43:49.970591+11:00","closed_at":"2025-12-13T08:43:49.970591+11:00"}
|
||||
{"id":"bd-j6lr","title":"GH#402: Add --parent flag documentation to bd onboard","description":"bd onboard output is missing --parent flag for epic subtasks. Agents guess wrong syntax (--deps parent:). See GitHub issue #402.","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T01:03:56.594829-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
|
||||
{"id":"bd-jgxi","title":"Auto-migrate database on CLI version bump","description":"When CLI is upgraded (e.g., 0.24.0 → 0.24.1), database version becomes stale. Add auto-migration in PersistentPreRun or daemon startup. Check dbVersion != CLIVersion and run bd migrate automatically. Fixes recurring UX issue where bd doctor shows version mismatch after every CLI upgrade.","status":"closed","priority":0,"issue_type":"feature","created_at":"2025-11-21T23:16:09.004619-08:00","updated_at":"2025-12-17T23:13:40.535453-08:00","closed_at":"2025-12-17T17:15:43.605762-08:00","dependencies":[{"issue_id":"bd-jgxi","depends_on_id":"bd-tbz3","type":"parent-child","created_at":"2025-11-21T23:16:09.005513-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-jvu","title":"Add bd update --parent flag to change issue parent","description":"Allow changing an issue's parent with bd update --parent \u003cnew-parent-id\u003e. Useful for reorganizing tasks under different epics or moving issues between hierarchies. Should update the parent-child dependency relationship.","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-17T22:24:07.274485-08:00","updated_at":"2025-12-17T22:34:07.318938-08:00","closed_at":"2025-12-17T22:34:07.318938-08:00"}
|
||||
{"id":"bd-kpy","title":"Sync race: rebase-based divergence recovery resurrects tombstones","description":"## Problem\nWhen two repos sync simultaneously, tombstones can be resurrected:\n\n1. Repo A deletes issue (creates tombstone), pushes to sync branch\n2. Repo B (with 'closed' status) exports and tries to push\n3. Push fails (non-fast-forward)\n4. fetchAndRebaseInWorktree does git rebase\n5. Git rebase applies B's 'closed' patch on top of A's 'tombstone'\n6. TEXT-level rebase doesn't invoke beads merge driver\n7. 'closed' overwrites 'tombstone' = resurrection\n\n## Root Cause\nCommitToSyncBranch uses git rebase for divergence recovery, but rebase is text-level, not content-level. The proper content-level merge in PullFromSyncBranch handles tombstones correctly, but it runs AFTER the problematic push.\n\n## Proposed Fix\nOption 1: Don't push in CommitToSyncBranch - let PullFromSyncBranch handle merge+push\nOption 2: Replace git rebase with content-level merge in fetchAndRebaseInWorktree\nOption 3: Reorder sync steps: Export → Pull/Merge → Commit → Push\n\n## Workaround Applied\nExcluded tombstones from orphan detection warnings (commit 1e97d9cc).\n\nSee also: bd-3852 (Add orphan detection migration)","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-17T23:29:33.049272-08:00","updated_at":"2025-12-17T23:29:33.049272-08:00"}
|
||||
{"id":"bd-kwro","title":"Beads Messaging \u0026 Knowledge Graph (v0.30.2)","description":"Add messaging semantics and extended graph links to Beads, enabling it to serve as\nthe universal substrate for knowledge work - issues, messages, documents, and threads\nas nodes in a queryable graph.\n\n## Motivation\n\nGas Town (GGT) needs inter-agent communication. Rather than a separate mail system,\ncollapse messaging into Beads - one system, one sync, one query interface, all in git.\n\nThis also positions Beads as a foundation for:\n- Company-wide issue tracking (like Notion)\n- Threaded conversations (like Reddit/Slack)\n- Knowledge graphs with loose associations\n- Arbitrary workflow UIs built on top\n\n## New Issue Type\n\n**message** - ephemeral communication between workers\n- sender: who sent it\n- assignee: recipient\n- priority: P0 (urgent) to P4 (routine)\n- status: open (unread) -\u003e closed (read)\n- ephemeral: true = can be bulk-deleted after swarm\n\n## New Graph Links\n\n**replies_to** - conversation threading\n- Messages reply to messages\n- Enables Reddit-style nested threads\n- Different from parent_id (not hierarchy, its conversation flow)\n\n**relates_to** - loose see also associations\n- Bidirectional knowledge graph edges\n- Not blocking, not hierarchical, just related\n- Enables discovery and traversal\n\n**duplicates** - deduplication at scale\n- Mark issue B as duplicate of canonical issue A\n- Close B, link to A\n- Essential for large issue databases\n\n**supersedes** - version chains\n- Design Doc v2 supersedes Design Doc v1\n- Track evolution of artifacts\n\n## New Fields (optional, any issue type)\n\n- sender (string) - who created this (for messages)\n- ephemeral (boolean) - can be bulk-deleted when closed\n\n## New Commands\n\nMessaging:\n- bd mail send \u003crecipient\u003e -s Subject -m Body\n- bd mail inbox (list open messages for me)\n- bd mail read \u003cid\u003e (show message content)\n- bd mail ack \u003cid\u003e (mark as read/close)\n- bd mail reply \u003cid\u003e -m Response (reply to thread)\n\nGraph links:\n- bd relate \u003cid1\u003e \u003cid2\u003e (create relates_to link)\n- bd duplicate \u003cid\u003e --of \u003ccanonical\u003e (mark as duplicate)\n- bd supersede \u003cid\u003e --with \u003cnew\u003e (mark superseded)\n\nCleanup:\n- bd cleanup --ephemeral (delete closed ephemeral issues)\n\n## Identity Configuration\n\nWorkers need identity for sender field:\n- BEADS_IDENTITY env var\n- Or .beads/config.json: identity field\n\n## Hooks (for GGT integration)\n\nBeads as platform - extensible without knowing about GGT.\nHook files in .beads/hooks/:\n- on_create (runs after bd create)\n- on_update (runs after bd update)\n- on_close (runs after bd close)\n- on_message (runs after bd mail send)\n\nGGT registers hooks to notify daemons of new messages.\n\n## Schema Changes (Migration Required)\n\nAdd to issue schema:\n- type: message (new valid type)\n- sender: string (optional)\n- ephemeral: boolean (optional)\n- replies_to: string (issue ID, optional)\n- relates_to: []string (issue IDs, optional)\n- duplicates: string (canonical issue ID, optional)\n- superseded_by: string (new issue ID, optional)\n\nMigration adds fields as optional - existing beads unchanged.\n\n## Success Criteria\n\n1. bd mail send/inbox/read/ack/reply work end-to-end\n2. replies_to creates proper thread structure\n3. relates_to, duplicates, supersedes links queryable\n4. Hooks fire on create/update/close/message\n5. Identity configurable via env or config\n6. Migration preserves all existing data\n7. All new features have tests","status":"tombstone","priority":0,"issue_type":"epic","created_at":"2025-12-16T03:00:53.912223-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"epic"}
|
||||
{"id":"bd-kwro.1","title":"Schema: Add message type and new fields","description":"Add to internal/storage/sqlite/schema.go and models:\n\nNew issue_type value:\n- message\n\nNew optional fields on Issue struct:\n- Sender string (who sent this)\n- Ephemeral bool (can be bulk-deleted)\n- RepliesTo string (issue ID for threading)\n- RelatesTo []string (issue IDs for knowledge graph)\n- Duplicates string (canonical issue ID)\n- SupersededBy string (replacement issue ID)\n\nUpdate:\n- internal/storage/sqlite/schema.go - add columns\n- internal/models/issue.go - add fields to struct\n- internal/storage/sqlite/sqlite.go - CRUD operations\n- Create migration from v0.30.1\n\nEnsure backward compatibility - all new fields optional.","status":"tombstone","priority":0,"issue_type":"task","created_at":"2025-12-16T03:01:19.777604-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
|
||||
{"id":"bd-kwro.10","title":"Tests for messaging and graph links","description":"Comprehensive test coverage for all new features.\n\nTest files:\n- cmd/bd/mail_test.go - mail command tests\n- internal/storage/sqlite/graph_links_test.go - graph link tests\n- internal/hooks/hooks_test.go - hook execution tests\n\nTest cases:\n- Mail send/inbox/read/ack lifecycle\n- Thread creation and traversal (replies_to)\n- Bidirectional relates_to\n- Duplicate marking and queries\n- Supersedes chains\n- Ephemeral cleanup\n- Identity resolution priority\n- Hook execution (mock hooks)\n- Schema migration preserves data\n\nTarget: \u003e80% coverage on new code","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T03:02:34.050136-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
|
||||
@@ -156,28 +159,28 @@
|
||||
{"id":"bd-ola6","title":"Implement transaction retry logic for SQLITE_BUSY","description":"BEGIN IMMEDIATE fails immediately on SQLITE_BUSY instead of retrying with exponential backoff.\n\nLocation: internal/storage/sqlite/sqlite.go:223-225\n\nProblem:\n- Under concurrent write load, BEGIN IMMEDIATE can fail with SQLITE_BUSY\n- Current implementation fails immediately instead of retrying\n- Results in spurious failures under normal concurrent usage\n\nSolution: Implement exponential backoff retry:\n- Retry up to N times (e.g., 5)\n- Backoff: 10ms, 20ms, 40ms, 80ms, 160ms\n- Check for context cancellation between retries\n- Only retry on SQLITE_BUSY/database locked errors\n\nImpact: Spurious failures under concurrent write load\n\nEffort: 3 hours","status":"open","priority":1,"issue_type":"feature","created_at":"2025-11-16T14:51:31.247147-08:00","updated_at":"2025-11-16T14:51:31.247147-08:00"}
|
||||
{"id":"bd-ork0","title":"Add comments to 30+ silently ignored errors or fix them","description":"Code health review found 30+ instances of error suppression using blank identifier without explanation:\n\nGood examples (with comments):\n- merge.go: _ = gitRmCmd.Run() // Ignore errors\n- daemon_watcher.go: _ = watcher.Add(...) // Ignore error\n\nBad examples (no context):\n- create.go:213: dbPrefix, _ = store.GetConfig(ctx, \"issue_prefix\")\n- daemon_sync_branch.go: _ = daemonClient.Close()\n- migrate_hash_ids.go, version_tracking.go: _ = store.Close()\n\nFix: Add comments explaining WHY errors are ignored, or handle them properly.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-16T18:17:25.899372-08:00","updated_at":"2025-12-16T18:17:25.899372-08:00","dependencies":[{"issue_id":"bd-ork0","depends_on_id":"bd-tggf","type":"blocks","created_at":"2025-12-16T18:19:06.275843-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-otf4","title":"Code Review: PR #481 - Context Engineering Optimizations","description":"Comprehensive code review of the merged context engineering PR (PR #481) that reduces MCP context usage by 80-90%.\n\n## Summary\nThe PR successfully implements lazy tool schema loading and minimal issue models to reduce context window usage. Overall implementation is solid and well-tested.\n\n## Positive Findings\n✅ Well-designed models (IssueMinimal, CompactedResult)\n✅ Comprehensive test coverage (28 tests, all passing)\n✅ Clear documentation and comments\n✅ Backward compatibility preserved (show() still returns full Issue)\n✅ Sensible defaults (COMPACTION_THRESHOLD=20, PREVIEW_COUNT=5)\n✅ Tool catalog complete with all 15 tools documented\n\n## Issues Identified\nSee linked issues for specific followup tasks.\n\n## Context Engineering Architecture\n- discover_tools(): List tool names only (~500 bytes vs ~15KB)\n- get_tool_info(name): Get specific tool details on-demand\n- IssueMinimal: Lightweight model for list views (~80 bytes vs ~400 bytes)\n- CompactedResult: Auto-compacts results with \u003e20 issues\n- _to_minimal(): Conversion function (efficient, no N+1 issues)","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-14T14:24:13.523532-08:00","updated_at":"2025-12-14T14:24:13.523532-08:00"}
|
||||
{"id":"bd-pbh","title":"Release v0.30.4","description":"## Version Bump Workflow\n\nCoordinating release from 0.30.3 to 0.30.4.\n\n### Components Updated\n- Go CLI (cmd/bd/version.go)\n- Claude Plugin (.claude-plugin/*.json)\n- MCP Server (integrations/beads-mcp/)\n- npm Package (npm-package/package.json)\n- Git hooks (cmd/bd/templates/hooks/)\n\n### Release Channels\n- GitHub Releases (GoReleaser)\n- PyPI (beads-mcp)\n- npm (@beads/cli)\n- Homebrew (homebrew-beads tap)\n","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-17T21:19:10.926133-08:00","updated_at":"2025-12-17T21:46:46.192948-08:00","closed_at":"2025-12-17T21:46:46.192948-08:00"}
|
||||
{"id":"bd-pbh.1","title":"Update cmd/bd/version.go to 0.30.4","description":"Update the Version constant in cmd/bd/version.go:\n```go\nVersion = \"0.30.4\"\n```\n\n\n```verify\ngrep -q 'Version = \"0.30.4\"' cmd/bd/version.go\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:10.9462-08:00","updated_at":"2025-12-17T21:46:46.20387-08:00","closed_at":"2025-12-17T21:46:46.20387-08:00","dependencies":[{"issue_id":"bd-pbh.1","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:10.946633-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.10","title":"Run check-versions.sh - all must pass","description":"Run the version consistency check:\n```bash\n./scripts/check-versions.sh\n```\n\nAll versions must match 0.30.4.\n\n\n```verify\n./scripts/check-versions.sh\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.047311-08:00","updated_at":"2025-12-17T21:46:46.28316-08:00","closed_at":"2025-12-17T21:46:46.28316-08:00","dependencies":[{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.047888-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.1","type":"blocks","created_at":"2025-12-17T21:19:11.159084-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.4","type":"blocks","created_at":"2025-12-17T21:19:11.168248-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.5","type":"blocks","created_at":"2025-12-17T21:19:11.177869-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.6","type":"blocks","created_at":"2025-12-17T21:19:11.187629-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.7","type":"blocks","created_at":"2025-12-17T21:19:11.199955-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.8","type":"blocks","created_at":"2025-12-17T21:19:11.211479-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.9","type":"blocks","created_at":"2025-12-17T21:19:11.224059-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.11","title":"Commit changes and create v0.30.4 tag","description":"```bash\ngit add -A\ngit commit -m \"chore: Bump version to 0.30.4\"\ngit tag -a v0.30.4 -m \"Release v0.30.4\"\n```\n\n\n```verify\ngit describe --tags --exact-match HEAD 2\u003e/dev/null | grep -q 'v0.30.4'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.056575-08:00","updated_at":"2025-12-17T21:46:46.292166-08:00","closed_at":"2025-12-17T21:46:46.292166-08:00","dependencies":[{"issue_id":"bd-pbh.11","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.056934-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.11","depends_on_id":"bd-pbh.10","type":"blocks","created_at":"2025-12-17T21:19:11.234175-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.11","depends_on_id":"bd-pbh.2","type":"blocks","created_at":"2025-12-17T21:19:11.245316-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.11","depends_on_id":"bd-pbh.3","type":"blocks","created_at":"2025-12-17T21:19:11.255362-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.12","title":"Push commit and tag to origin","description":"```bash\ngit push origin main\ngit push origin v0.30.4\n```\n\nThis triggers GitHub Actions:\n- GoReleaser build\n- PyPI publish\n- npm publish\n\n\n```verify\ngit ls-remote origin refs/tags/v0.30.4 | grep -q 'v0.30.4'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.066074-08:00","updated_at":"2025-12-17T21:46:46.301948-08:00","closed_at":"2025-12-17T21:46:46.301948-08:00","dependencies":[{"issue_id":"bd-pbh.12","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.066442-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.12","depends_on_id":"bd-pbh.11","type":"blocks","created_at":"2025-12-17T21:19:11.265986-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.13","title":"Monitor GoReleaser CI job","description":"Watch the GoReleaser action:\nhttps://github.com/steveyegge/beads/actions/workflows/release.yml\n\nShould complete in ~10 minutes and create:\n- GitHub Release with binaries for all platforms\n- Checksums and signatures\n\nCheck status:\n```bash\ngh run list --workflow=release.yml -L 1\ngh run watch # to monitor live\n```\n\nVerify release exists:\n```bash\ngh release view v0.30.4\n```\n\n\n```verify\ngh release view v0.30.4 --json tagName -q .tagName | grep -q 'v0.30.4'\n```","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T21:19:11.074476-08:00","updated_at":"2025-12-17T21:46:46.311506-08:00","closed_at":"2025-12-17T21:46:46.311506-08:00","dependencies":[{"issue_id":"bd-pbh.13","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.074833-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.13","depends_on_id":"bd-pbh.12","type":"blocks","created_at":"2025-12-17T21:19:11.279092-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.14","title":"Monitor PyPI publish","description":"Watch the PyPI publish action:\nhttps://github.com/steveyegge/beads/actions/workflows/pypi-publish.yml\n\nVerify at: https://pypi.org/project/beads-mcp/0.30.4/\n\nCheck:\n```bash\npip index versions beads-mcp 2\u003e/dev/null | grep -q '0.30.4'\n```\n\n\n```verify\npip index versions beads-mcp 2\u003e/dev/null | grep -q '0.30.4' || curl -s https://pypi.org/pypi/beads-mcp/json | jq -e '.releases[\"0.30.4\"]'\n```","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T21:19:11.083809-08:00","updated_at":"2025-12-17T21:46:46.320922-08:00","closed_at":"2025-12-17T21:46:46.320922-08:00","dependencies":[{"issue_id":"bd-pbh.14","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.084126-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.14","depends_on_id":"bd-pbh.12","type":"blocks","created_at":"2025-12-17T21:19:11.289698-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.15","title":"Monitor npm publish","description":"Watch the npm publish action:\nhttps://github.com/steveyegge/beads/actions/workflows/npm-publish.yml\n\nVerify at: https://www.npmjs.com/package/@anthropics/claude-code-beads-plugin/v/0.30.4\n\nCheck:\n```bash\nnpm view @anthropics/claude-code-beads-plugin@0.30.4 version\n```\n\n\n```verify\nnpm view @anthropics/claude-code-beads-plugin@0.30.4 version 2\u003e/dev/null | grep -q '0.30.4'\n```","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T21:19:11.091806-08:00","updated_at":"2025-12-17T21:46:46.333213-08:00","closed_at":"2025-12-17T21:46:46.333213-08:00","dependencies":[{"issue_id":"bd-pbh.15","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.092205-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.15","depends_on_id":"bd-pbh.12","type":"blocks","created_at":"2025-12-17T21:19:11.301843-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.16","title":"Update Homebrew formula","description":"After GoReleaser completes, the Homebrew tap should be auto-updated.\n\nIf manual update needed:\n```bash\n./scripts/update-homebrew.sh v0.30.4\n```\n\nOr manually update steveyegge/homebrew-beads with new SHA256.\n\nVerify:\n```bash\nbrew update\nbrew info beads\n```\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T21:19:11.100213-08:00","updated_at":"2025-12-17T21:46:46.341942-08:00","closed_at":"2025-12-17T21:46:46.341942-08:00","dependencies":[{"issue_id":"bd-pbh.16","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.100541-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.16","depends_on_id":"bd-pbh.13","type":"blocks","created_at":"2025-12-17T21:19:11.312625-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.17","title":"Install 0.30.4 Go binary locally","description":"Rebuild and install the Go binary:\n```bash\ngo install ./cmd/bd\n# OR\nmake install\n```\n\nVerify:\n```bash\nbd --version\n```\n\n\n```verify\nbd --version 2\u003e\u00261 | grep -q '0.30.4'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.108597-08:00","updated_at":"2025-12-17T21:46:46.352702-08:00","closed_at":"2025-12-17T21:46:46.352702-08:00","dependencies":[{"issue_id":"bd-pbh.17","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.108917-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.17","depends_on_id":"bd-pbh.13","type":"blocks","created_at":"2025-12-17T21:19:11.322091-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.18","title":"Restart beads daemon","description":"Kill any running daemons so they pick up the new version:\n```bash\nbd daemons killall\n```\n\nStart fresh daemon:\n```bash\nbd list # triggers daemon start\n```\n\nVerify daemon version:\n```bash\nbd version --daemon\n```\n\n\n```verify\nbd version --daemon 2\u003e\u00261 | grep -q '0.30.4'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.11636-08:00","updated_at":"2025-12-17T21:46:46.364842-08:00","closed_at":"2025-12-17T21:46:46.364842-08:00","dependencies":[{"issue_id":"bd-pbh.18","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.116706-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.18","depends_on_id":"bd-pbh.17","type":"blocks","created_at":"2025-12-17T21:19:11.330411-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.19","title":"Install 0.30.4 MCP server locally","description":"Upgrade the MCP server (after PyPI publish):\n```bash\npip install --upgrade beads-mcp\n# OR if using uv:\nuv tool upgrade beads-mcp\n```\n\nVerify:\n```bash\npip show beads-mcp | grep Version\n```\n\n\n```verify\npip show beads-mcp 2\u003e/dev/null | grep -q 'Version: 0.30.4'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.124496-08:00","updated_at":"2025-12-17T21:46:46.372989-08:00","closed_at":"2025-12-17T21:46:46.372989-08:00","dependencies":[{"issue_id":"bd-pbh.19","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.124829-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.19","depends_on_id":"bd-pbh.14","type":"blocks","created_at":"2025-12-17T21:19:11.343558-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.2","title":"Update CHANGELOG.md for 0.30.4","description":"1. Change `## [Unreleased]` to `## [0.30.4] - 2025-12-17`\n2. Add new empty `## [Unreleased]` section at top\n3. Ensure all changes since 0.30.3 are documented\n","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:10.956332-08:00","updated_at":"2025-12-17T21:46:46.214512-08:00","closed_at":"2025-12-17T21:46:46.214512-08:00","dependencies":[{"issue_id":"bd-pbh.2","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:10.95683-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.20","title":"Update git hooks","description":"Install the updated hooks:\n```bash\nbd hooks install\n```\n\nVerify hook version:\n```bash\ngrep 'bd-hooks-version' .git/hooks/pre-commit\n```\n\n\n```verify\ngrep -q 'bd-hooks-version: 0.30.4' .git/hooks/pre-commit 2\u003e/dev/null || echo 'Hooks may not be installed - verify manually'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.13198-08:00","updated_at":"2025-12-17T21:46:46.381519-08:00","closed_at":"2025-12-17T21:46:46.381519-08:00","dependencies":[{"issue_id":"bd-pbh.20","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.132306-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.20","depends_on_id":"bd-pbh.17","type":"blocks","created_at":"2025-12-17T21:19:11.352288-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.21","title":"Final release verification","description":"Verify all release artifacts are accessible:\n\n- [ ] `bd --version` shows 0.30.4\n- [ ] `bd version --daemon` shows 0.30.4\n- [ ] GitHub release exists: https://github.com/steveyegge/beads/releases/tag/v0.30.4\n- [ ] `brew upgrade beads \u0026\u0026 bd --version` shows 0.30.4 (if using Homebrew)\n- [ ] `pip show beads-mcp` shows 0.30.4\n- [ ] npm package available at 0.30.4\n- [ ] `bd info --whats-new` shows 0.30.4 notes\n\nRun final checks:\n```bash\nbd --version\nbd version --daemon\npip show beads-mcp | grep Version\nbd info --whats-new\n```\n","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.141249-08:00","updated_at":"2025-12-17T21:46:46.390985-08:00","closed_at":"2025-12-17T21:46:46.390985-08:00","dependencies":[{"issue_id":"bd-pbh.21","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.141549-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.21","depends_on_id":"bd-pbh.18","type":"blocks","created_at":"2025-12-17T21:19:11.364839-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.21","depends_on_id":"bd-pbh.19","type":"blocks","created_at":"2025-12-17T21:19:11.373656-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.21","depends_on_id":"bd-pbh.20","type":"blocks","created_at":"2025-12-17T21:19:11.382-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.21","depends_on_id":"bd-pbh.15","type":"blocks","created_at":"2025-12-17T21:19:11.389733-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.21","depends_on_id":"bd-pbh.16","type":"blocks","created_at":"2025-12-17T21:19:11.398347-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.3","title":"Add 0.30.4 to info.go release notes","description":"Update cmd/bd/info.go versionChanges map with release notes for 0.30.4.\nInclude any workflow-impacting changes for --whats-new output.\n","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:10.966781-08:00","updated_at":"2025-12-17T21:46:46.222445-08:00","closed_at":"2025-12-17T21:46:46.222445-08:00","dependencies":[{"issue_id":"bd-pbh.3","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:10.967287-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.3","depends_on_id":"bd-pbh.2","type":"blocks","created_at":"2025-12-17T21:19:11.149584-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.4","title":"Update .claude-plugin/plugin.json to 0.30.4","description":"Update version field in .claude-plugin/plugin.json:\n```json\n\"version\": \"0.30.4\"\n```\n\n\n```verify\njq -e '.version == \"0.30.4\"' .claude-plugin/plugin.json\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:10.976866-08:00","updated_at":"2025-12-17T21:46:46.23159-08:00","closed_at":"2025-12-17T21:46:46.23159-08:00","dependencies":[{"issue_id":"bd-pbh.4","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:10.97729-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.5","title":"Update .claude-plugin/marketplace.json to 0.30.4","description":"Update version field in .claude-plugin/marketplace.json:\n```json\n\"version\": \"0.30.4\"\n```\n\n\n```verify\njq -e '.plugins[0].version == \"0.30.4\"' .claude-plugin/marketplace.json\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:10.985619-08:00","updated_at":"2025-12-17T21:46:46.239122-08:00","closed_at":"2025-12-17T21:46:46.239122-08:00","dependencies":[{"issue_id":"bd-pbh.5","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:10.985942-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.6","title":"Update integrations/beads-mcp/pyproject.toml to 0.30.4","description":"Update version in pyproject.toml:\n```toml\nversion = \"0.30.4\"\n```\n\n\n```verify\ngrep -q 'version = \"0.30.4\"' integrations/beads-mcp/pyproject.toml\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:10.994004-08:00","updated_at":"2025-12-17T21:46:46.246574-08:00","closed_at":"2025-12-17T21:46:46.246574-08:00","dependencies":[{"issue_id":"bd-pbh.6","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:10.994376-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.7","title":"Update beads_mcp/__init__.py to 0.30.4","description":"Update __version__ in integrations/beads-mcp/src/beads_mcp/__init__.py:\n```python\n__version__ = \"0.30.4\"\n```\n\n\n```verify\ngrep -q '__version__ = \"0.30.4\"' integrations/beads-mcp/src/beads_mcp/__init__.py\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.005334-08:00","updated_at":"2025-12-17T21:46:46.254885-08:00","closed_at":"2025-12-17T21:46:46.254885-08:00","dependencies":[{"issue_id":"bd-pbh.7","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.005699-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.8","title":"Update npm-package/package.json to 0.30.4","description":"Update version field in npm-package/package.json:\n```json\n\"version\": \"0.30.4\"\n```\n\n\n```verify\njq -e '.version == \"0.30.4\"' npm-package/package.json\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.014905-08:00","updated_at":"2025-12-17T21:46:46.268821-08:00","closed_at":"2025-12-17T21:46:46.268821-08:00","dependencies":[{"issue_id":"bd-pbh.8","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.01529-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.9","title":"Update hook templates to 0.30.4","description":"Update bd-hooks-version comment in all 4 hook templates:\n- cmd/bd/templates/hooks/pre-commit\n- cmd/bd/templates/hooks/post-merge\n- cmd/bd/templates/hooks/pre-push\n- cmd/bd/templates/hooks/post-checkout\n\nEach should have:\n```bash\n# bd-hooks-version: 0.30.4\n```\n\n\n```verify\ngrep -l 'bd-hooks-version: 0.30.4' cmd/bd/templates/hooks/* | wc -l | grep -q '4'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.0248-08:00","updated_at":"2025-12-17T21:46:46.27561-08:00","closed_at":"2025-12-17T21:46:46.27561-08:00","dependencies":[{"issue_id":"bd-pbh.9","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.025124-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh","title":"Release v0.30.4","description":"## Version Bump Workflow\n\nCoordinating release from 0.30.3 to 0.30.4.\n\n### Components Updated\n- Go CLI (cmd/bd/version.go)\n- Claude Plugin (.claude-plugin/*.json)\n- MCP Server (integrations/beads-mcp/)\n- npm Package (npm-package/package.json)\n- Git hooks (cmd/bd/templates/hooks/)\n\n### Release Channels\n- GitHub Releases (GoReleaser)\n- PyPI (beads-mcp)\n- npm (@beads/cli)\n- Homebrew (homebrew-beads tap)\n","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-17T21:19:10.926133-08:00","updated_at":"2025-12-17T21:46:46.192948-08:00","closed_at":"2025-12-17T21:46:46.192948-08:00","labels":["release","v0.30.4","workflow"]}
|
||||
{"id":"bd-pbh.1","title":"Update cmd/bd/version.go to 0.30.4","description":"Update the Version constant in cmd/bd/version.go:\n```go\nVersion = \"0.30.4\"\n```\n\n\n```verify\ngrep -q 'Version = \"0.30.4\"' cmd/bd/version.go\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:10.9462-08:00","updated_at":"2025-12-17T21:46:46.20387-08:00","closed_at":"2025-12-17T21:46:46.20387-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.1","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:10.946633-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.10","title":"Run check-versions.sh - all must pass","description":"Run the version consistency check:\n```bash\n./scripts/check-versions.sh\n```\n\nAll versions must match 0.30.4.\n\n\n```verify\n./scripts/check-versions.sh\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.047311-08:00","updated_at":"2025-12-17T21:46:46.28316-08:00","closed_at":"2025-12-17T21:46:46.28316-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.047888-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.1","type":"blocks","created_at":"2025-12-17T21:19:11.159084-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.4","type":"blocks","created_at":"2025-12-17T21:19:11.168248-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.5","type":"blocks","created_at":"2025-12-17T21:19:11.177869-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.6","type":"blocks","created_at":"2025-12-17T21:19:11.187629-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.7","type":"blocks","created_at":"2025-12-17T21:19:11.199955-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.8","type":"blocks","created_at":"2025-12-17T21:19:11.211479-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.10","depends_on_id":"bd-pbh.9","type":"blocks","created_at":"2025-12-17T21:19:11.224059-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.11","title":"Commit changes and create v0.30.4 tag","description":"```bash\ngit add -A\ngit commit -m \"chore: Bump version to 0.30.4\"\ngit tag -a v0.30.4 -m \"Release v0.30.4\"\n```\n\n\n```verify\ngit describe --tags --exact-match HEAD 2\u003e/dev/null | grep -q 'v0.30.4'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.056575-08:00","updated_at":"2025-12-17T21:46:46.292166-08:00","closed_at":"2025-12-17T21:46:46.292166-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.11","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.056934-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.11","depends_on_id":"bd-pbh.10","type":"blocks","created_at":"2025-12-17T21:19:11.234175-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.11","depends_on_id":"bd-pbh.2","type":"blocks","created_at":"2025-12-17T21:19:11.245316-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.11","depends_on_id":"bd-pbh.3","type":"blocks","created_at":"2025-12-17T21:19:11.255362-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.12","title":"Push commit and tag to origin","description":"```bash\ngit push origin main\ngit push origin v0.30.4\n```\n\nThis triggers GitHub Actions:\n- GoReleaser build\n- PyPI publish\n- npm publish\n\n\n```verify\ngit ls-remote origin refs/tags/v0.30.4 | grep -q 'v0.30.4'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.066074-08:00","updated_at":"2025-12-17T21:46:46.301948-08:00","closed_at":"2025-12-17T21:46:46.301948-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.12","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.066442-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.12","depends_on_id":"bd-pbh.11","type":"blocks","created_at":"2025-12-17T21:19:11.265986-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.13","title":"Monitor GoReleaser CI job","description":"Watch the GoReleaser action:\nhttps://github.com/steveyegge/beads/actions/workflows/release.yml\n\nShould complete in ~10 minutes and create:\n- GitHub Release with binaries for all platforms\n- Checksums and signatures\n\nCheck status:\n```bash\ngh run list --workflow=release.yml -L 1\ngh run watch # to monitor live\n```\n\nVerify release exists:\n```bash\ngh release view v0.30.4\n```\n\n\n```verify\ngh release view v0.30.4 --json tagName -q .tagName | grep -q 'v0.30.4'\n```","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T21:19:11.074476-08:00","updated_at":"2025-12-17T21:46:46.311506-08:00","closed_at":"2025-12-17T21:46:46.311506-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.13","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.074833-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.13","depends_on_id":"bd-pbh.12","type":"blocks","created_at":"2025-12-17T21:19:11.279092-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.14","title":"Monitor PyPI publish","description":"Watch the PyPI publish action:\nhttps://github.com/steveyegge/beads/actions/workflows/pypi-publish.yml\n\nVerify at: https://pypi.org/project/beads-mcp/0.30.4/\n\nCheck:\n```bash\npip index versions beads-mcp 2\u003e/dev/null | grep -q '0.30.4'\n```\n\n\n```verify\npip index versions beads-mcp 2\u003e/dev/null | grep -q '0.30.4' || curl -s https://pypi.org/pypi/beads-mcp/json | jq -e '.releases[\"0.30.4\"]'\n```","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T21:19:11.083809-08:00","updated_at":"2025-12-17T21:46:46.320922-08:00","closed_at":"2025-12-17T21:46:46.320922-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.14","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.084126-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.14","depends_on_id":"bd-pbh.12","type":"blocks","created_at":"2025-12-17T21:19:11.289698-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.15","title":"Monitor npm publish","description":"Watch the npm publish action:\nhttps://github.com/steveyegge/beads/actions/workflows/npm-publish.yml\n\nVerify at: https://www.npmjs.com/package/@anthropics/claude-code-beads-plugin/v/0.30.4\n\nCheck:\n```bash\nnpm view @anthropics/claude-code-beads-plugin@0.30.4 version\n```\n\n\n```verify\nnpm view @anthropics/claude-code-beads-plugin@0.30.4 version 2\u003e/dev/null | grep -q '0.30.4'\n```","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T21:19:11.091806-08:00","updated_at":"2025-12-17T21:46:46.333213-08:00","closed_at":"2025-12-17T21:46:46.333213-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.15","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.092205-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.15","depends_on_id":"bd-pbh.12","type":"blocks","created_at":"2025-12-17T21:19:11.301843-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.16","title":"Update Homebrew formula","description":"After GoReleaser completes, the Homebrew tap should be auto-updated.\n\nIf manual update needed:\n```bash\n./scripts/update-homebrew.sh v0.30.4\n```\n\nOr manually update steveyegge/homebrew-beads with new SHA256.\n\nVerify:\n```bash\nbrew update\nbrew info beads\n```\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T21:19:11.100213-08:00","updated_at":"2025-12-17T21:46:46.341942-08:00","closed_at":"2025-12-17T21:46:46.341942-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.16","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.100541-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.16","depends_on_id":"bd-pbh.13","type":"blocks","created_at":"2025-12-17T21:19:11.312625-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.17","title":"Install 0.30.4 Go binary locally","description":"Rebuild and install the Go binary:\n```bash\ngo install ./cmd/bd\n# OR\nmake install\n```\n\nVerify:\n```bash\nbd --version\n```\n\n\n```verify\nbd --version 2\u003e\u00261 | grep -q '0.30.4'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.108597-08:00","updated_at":"2025-12-17T21:46:46.352702-08:00","closed_at":"2025-12-17T21:46:46.352702-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.17","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.108917-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.17","depends_on_id":"bd-pbh.13","type":"blocks","created_at":"2025-12-17T21:19:11.322091-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.18","title":"Restart beads daemon","description":"Kill any running daemons so they pick up the new version:\n```bash\nbd daemons killall\n```\n\nStart fresh daemon:\n```bash\nbd list # triggers daemon start\n```\n\nVerify daemon version:\n```bash\nbd version --daemon\n```\n\n\n```verify\nbd version --daemon 2\u003e\u00261 | grep -q '0.30.4'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.11636-08:00","updated_at":"2025-12-17T21:46:46.364842-08:00","closed_at":"2025-12-17T21:46:46.364842-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.18","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.116706-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.18","depends_on_id":"bd-pbh.17","type":"blocks","created_at":"2025-12-17T21:19:11.330411-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.19","title":"Install 0.30.4 MCP server locally","description":"Upgrade the MCP server (after PyPI publish):\n```bash\npip install --upgrade beads-mcp\n# OR if using uv:\nuv tool upgrade beads-mcp\n```\n\nVerify:\n```bash\npip show beads-mcp | grep Version\n```\n\n\n```verify\npip show beads-mcp 2\u003e/dev/null | grep -q 'Version: 0.30.4'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.124496-08:00","updated_at":"2025-12-17T21:46:46.372989-08:00","closed_at":"2025-12-17T21:46:46.372989-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.19","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.124829-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.19","depends_on_id":"bd-pbh.14","type":"blocks","created_at":"2025-12-17T21:19:11.343558-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.2","title":"Update CHANGELOG.md for 0.30.4","description":"1. Change `## [Unreleased]` to `## [0.30.4] - 2025-12-17`\n2. Add new empty `## [Unreleased]` section at top\n3. Ensure all changes since 0.30.3 are documented\n","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:10.956332-08:00","updated_at":"2025-12-17T21:46:46.214512-08:00","closed_at":"2025-12-17T21:46:46.214512-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.2","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:10.95683-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.20","title":"Update git hooks","description":"Install the updated hooks:\n```bash\nbd hooks install\n```\n\nVerify hook version:\n```bash\ngrep 'bd-hooks-version' .git/hooks/pre-commit\n```\n\n\n```verify\ngrep -q 'bd-hooks-version: 0.30.4' .git/hooks/pre-commit 2\u003e/dev/null || echo 'Hooks may not be installed - verify manually'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.13198-08:00","updated_at":"2025-12-17T21:46:46.381519-08:00","closed_at":"2025-12-17T21:46:46.381519-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.20","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.132306-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.20","depends_on_id":"bd-pbh.17","type":"blocks","created_at":"2025-12-17T21:19:11.352288-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.21","title":"Final release verification","description":"Verify all release artifacts are accessible:\n\n- [ ] `bd --version` shows 0.30.4\n- [ ] `bd version --daemon` shows 0.30.4\n- [ ] GitHub release exists: https://github.com/steveyegge/beads/releases/tag/v0.30.4\n- [ ] `brew upgrade beads \u0026\u0026 bd --version` shows 0.30.4 (if using Homebrew)\n- [ ] `pip show beads-mcp` shows 0.30.4\n- [ ] npm package available at 0.30.4\n- [ ] `bd info --whats-new` shows 0.30.4 notes\n\nRun final checks:\n```bash\nbd --version\nbd version --daemon\npip show beads-mcp | grep Version\nbd info --whats-new\n```\n","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.141249-08:00","updated_at":"2025-12-17T21:46:46.390985-08:00","closed_at":"2025-12-17T21:46:46.390985-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.21","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.141549-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.21","depends_on_id":"bd-pbh.18","type":"blocks","created_at":"2025-12-17T21:19:11.364839-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.21","depends_on_id":"bd-pbh.19","type":"blocks","created_at":"2025-12-17T21:19:11.373656-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.21","depends_on_id":"bd-pbh.20","type":"blocks","created_at":"2025-12-17T21:19:11.382-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.21","depends_on_id":"bd-pbh.15","type":"blocks","created_at":"2025-12-17T21:19:11.389733-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.21","depends_on_id":"bd-pbh.16","type":"blocks","created_at":"2025-12-17T21:19:11.398347-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.3","title":"Add 0.30.4 to info.go release notes","description":"Update cmd/bd/info.go versionChanges map with release notes for 0.30.4.\nInclude any workflow-impacting changes for --whats-new output.\n","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:10.966781-08:00","updated_at":"2025-12-17T21:46:46.222445-08:00","closed_at":"2025-12-17T21:46:46.222445-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.3","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:10.967287-08:00","created_by":"daemon"},{"issue_id":"bd-pbh.3","depends_on_id":"bd-pbh.2","type":"blocks","created_at":"2025-12-17T21:19:11.149584-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.4","title":"Update .claude-plugin/plugin.json to 0.30.4","description":"Update version field in .claude-plugin/plugin.json:\n```json\n\"version\": \"0.30.4\"\n```\n\n\n```verify\njq -e '.version == \"0.30.4\"' .claude-plugin/plugin.json\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:10.976866-08:00","updated_at":"2025-12-17T21:46:46.23159-08:00","closed_at":"2025-12-17T21:46:46.23159-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.4","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:10.97729-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.5","title":"Update .claude-plugin/marketplace.json to 0.30.4","description":"Update version field in .claude-plugin/marketplace.json:\n```json\n\"version\": \"0.30.4\"\n```\n\n\n```verify\njq -e '.plugins[0].version == \"0.30.4\"' .claude-plugin/marketplace.json\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:10.985619-08:00","updated_at":"2025-12-17T21:46:46.239122-08:00","closed_at":"2025-12-17T21:46:46.239122-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.5","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:10.985942-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.6","title":"Update integrations/beads-mcp/pyproject.toml to 0.30.4","description":"Update version in pyproject.toml:\n```toml\nversion = \"0.30.4\"\n```\n\n\n```verify\ngrep -q 'version = \"0.30.4\"' integrations/beads-mcp/pyproject.toml\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:10.994004-08:00","updated_at":"2025-12-17T21:46:46.246574-08:00","closed_at":"2025-12-17T21:46:46.246574-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.6","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:10.994376-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.7","title":"Update beads_mcp/__init__.py to 0.30.4","description":"Update __version__ in integrations/beads-mcp/src/beads_mcp/__init__.py:\n```python\n__version__ = \"0.30.4\"\n```\n\n\n```verify\ngrep -q '__version__ = \"0.30.4\"' integrations/beads-mcp/src/beads_mcp/__init__.py\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.005334-08:00","updated_at":"2025-12-17T21:46:46.254885-08:00","closed_at":"2025-12-17T21:46:46.254885-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.7","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.005699-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.8","title":"Update npm-package/package.json to 0.30.4","description":"Update version field in npm-package/package.json:\n```json\n\"version\": \"0.30.4\"\n```\n\n\n```verify\njq -e '.version == \"0.30.4\"' npm-package/package.json\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.014905-08:00","updated_at":"2025-12-17T21:46:46.268821-08:00","closed_at":"2025-12-17T21:46:46.268821-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.8","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.01529-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pbh.9","title":"Update hook templates to 0.30.4","description":"Update bd-hooks-version comment in all 4 hook templates:\n- cmd/bd/templates/hooks/pre-commit\n- cmd/bd/templates/hooks/post-merge\n- cmd/bd/templates/hooks/pre-push\n- cmd/bd/templates/hooks/post-checkout\n\nEach should have:\n```bash\n# bd-hooks-version: 0.30.4\n```\n\n\n```verify\ngrep -l 'bd-hooks-version: 0.30.4' cmd/bd/templates/hooks/* | wc -l | grep -q '4'\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T21:19:11.0248-08:00","updated_at":"2025-12-17T21:46:46.27561-08:00","closed_at":"2025-12-17T21:46:46.27561-08:00","labels":["workflow"],"dependencies":[{"issue_id":"bd-pbh.9","depends_on_id":"bd-pbh","type":"parent-child","created_at":"2025-12-17T21:19:11.025124-08:00","created_by":"daemon"}]}
|
||||
{"id":"bd-pdr2","title":"Consider backwards compatibility for ready() and list() return type change","description":"PR #481 changed the return types of `ready()` and `list()` from `list[Issue]` to `list[IssueMinimal] | CompactedResult`. This is a breaking change for MCP clients.\n\n## Impact Assessment\nBreaking change affects:\n- Any MCP client expecting `list[Issue]` from ready()\n- Any MCP client expecting `list[Issue]` from list()\n- Client code that accesses full Issue fields (description, design, acceptance_criteria, timestamps, dependencies, dependents)\n\n## Current Behavior\n- ready() returns `list[IssueMinimal] | CompactedResult`\n- list() returns `list[IssueMinimal] | CompactedResult`\n- show() still returns full `Issue` (good)\n\n## Considerations\n**Pros of current approach:**\n- Forces clients to use show() for full details (good for context efficiency)\n- Simple mental model (always use show for full data)\n- Documentation warns about this\n\n**Cons:**\n- Clients expecting list[Issue] will break\n- No graceful degradation option\n- No migration period\n\n## Potential Solutions\n1. Add optional parameter `full_details=false` to ready/list (would increase payload)\n2. Create separate tools: ready_minimal/list_minimal + ready_full/list_full\n3. Accept breaking change and document upgrade path (current approach)\n4. Version the MCP server and document migration guide\n\n## Recommendation\nCurrent approach (solution 3) is reasonable if:\n- Changelog clearly documents the breaking change\n- Migration guide provided to clients\n- Error handling is graceful for clients expecting specific fields","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-14T14:24:56.460465-08:00","updated_at":"2025-12-14T14:24:56.460465-08:00","dependencies":[{"issue_id":"bd-pdr2","depends_on_id":"bd-otf4","type":"discovered-from","created_at":"2025-12-14T14:24:56.461959-08:00","created_by":"stevey"}]}
|
||||
{"id":"bd-pe4s","title":"JSON test issue","description":"Line 1\nLine 2\nLine 3","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T16:14:36.969074-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
|
||||
{"id":"bd-pgcs","title":"Clean up orphaned child issues (bd-cb64c226.*, bd-cbed9619.*)","description":"## Problem\n\nEvery bd command shows warnings about 12 orphaned child issues:\n- bd-cb64c226.1, .6, .8, .9, .10, .12, .13\n- bd-cbed9619.1, .2, .3, .4, .5\n\nThese are hierarchical IDs (parent.child format) where the parent issues no longer exist.\n\n## Impact\n\n- Clutters output of every bd command\n- Confusing for users\n- Indicates incomplete cleanup of deleted parent issues\n\n## Proposed Solution\n\n1. Delete the orphaned issues since their parents no longer exist:\n ```bash\n bd delete bd-cb64c226.1 bd-cb64c226.6 bd-cb64c226.8 ...\n ```\n\n2. Or convert them to top-level issues if they contain useful content\n\n## Investigation Needed\n\n- What were the parent issues bd-cb64c226 and bd-cbed9619?\n- Why were they deleted without their children?\n- Should bd delete cascade to children automatically?","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-16T23:06:17.240571-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
|
||||
|
||||
Reference in New Issue
Block a user