bd sync: 2025-11-30 22:11:35
This commit is contained in:
@@ -47,7 +47,6 @@
|
||||
{"id":"bd-emg","title":"bd init should refuse when JSONL already has issues (safety guard)","description":"When running `bd init` in a directory with an existing JSONL containing issues, bd should refuse and suggest the correct action instead of proceeding.\n\n## The Problem\n\nCurrent behavior when database is missing but JSONL exists:\n```\n$ bd create \"test\"\nError: no beads database found\nHint: run 'bd init' to create a database...\n```\n\nThis leads users (and AI agents) to reflexively run `bd init`, which can cause:\n- Prefix mismatch if wrong prefix specified\n- Data corruption if JSONL is damaged\n- Confusion about what actually happened\n\n## Proposed Behavior\n\n```\n$ bd init --prefix bd\n\n⚠ Found existing .beads/issues.jsonl with 76 issues.\n\nThis appears to be a fresh clone, not a new project.\n\nTo hydrate the database from existing JSONL:\n bd doctor --fix\n\nTo force re-initialization (may cause data loss):\n bd init --prefix bd --force\n\nAborting.\n```\n\n## Trigger Conditions\n\n- `.beads/issues.jsonl` or `.beads/beads.jsonl` exists\n- File contains \u003e 0 valid issue lines\n- No `--force` flag provided\n\n## Edge Cases\n\n- Empty JSONL (0 issues) → allow init (new project)\n- Corrupted JSONL → warn but allow with confirmation\n- Existing `.db` file → definitely refuse (weird state)\n\n## Related\n\n- bd-dmb: Fresh clone should suggest hydration (better error messages)\n- bd-4ew: bd doctor should detect fresh clone\n\nThis issue is about the safety guard on `bd init` itself, not the error messages from other commands.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-11-28T18:21:41.149304-08:00","updated_at":"2025-11-28T22:17:18.849507-08:00","closed_at":"2025-11-28T22:17:18.849507-08:00"}
|
||||
{"id":"bd-f0n","title":"Git history fallback missing timeout - could hang on large repos","description":"## Problem\n\nThe git commands in `checkGitHistoryForDeletions` have no timeout. On large repos with extensive history, `git log --all -S` or `git log --all -G` can take a very long time (minutes).\n\n## Location\n`internal/importer/importer.go:899` and `:930`\n\n## Impact\n- Import could hang indefinitely\n- User has no feedback that git search is running\n- No way to cancel except killing the process\n\n## Fix\nAdd context with timeout to git commands:\n\n```go\nctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)\ndefer cancel()\ncmd := exec.CommandContext(ctx, \"git\", ...)\n```\n\nAlso consider adding a `--since` flag to bound the git history search.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-11-25T12:48:24.388639-08:00","updated_at":"2025-11-25T15:04:53.669714-08:00","closed_at":"2025-11-25T15:04:53.669714-08:00"}
|
||||
{"id":"bd-f2f","title":"CRITICAL: bd sync exports before pull, allowing stale DB to corrupt JSONL statuses","description":"## Root Cause\n\nThe fix in bd-53c (reverse ZFC check) only checks COUNTS, not content. The real corruption happens when:\n\n1. Polecat A has stale DB with old status values (e.g., status=closed for issues that are now open on remote)\n2. Polecat A runs bd sync:\n - **Export FIRST**: DB (status=closed) → JSONL (overwrites correct status=open)\n - Commit: Stale JSONL committed\n - Pull: 3-way merge with remote\n - Merge uses 'closed wins' rule → status stays closed\n3. Polecat A pushes → Remote now corrupted with status=closed\n\n## Why bd-53c didn't fix it\n\nThe reverse ZFC check compares COUNTS:\n```go\nif jsonlCount \u003e dbCount // Only catches count mismatch\n```\n\nBut in the corruption scenario:\n- JSONL count = 5, DB count = 5 (same count!)\n- Only the STATUS field differs\n\n## The Real Fix\n\n**PULL BEFORE EXPORT**. The sync order must be:\n1. Pull from remote (get latest state)\n2. Import merged JSONL to DB\n3. THEN export DB changes (if any)\n\nCurrent order is: Export → Commit → Pull → Import → Push\n\nThis is a fundamental architecture change to the sync flow.\n\n## Workaround\n\nUse --no-auto-flush and manually control the sync order, or disable daemon auto-export.\n\n## Evidence\n\nFrom user investigation:\n- At 595b7943 (13:20:30): 5 open issues\n- At 10239812 (13:28:39): 0 open issues\n- All 5 issues had their status changed from open to closed\n- Count stayed at 5 (not a deletion issue)","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-11-29T17:33:26.744766-08:00","updated_at":"2025-11-29T19:24:31.010075-08:00","closed_at":"2025-11-29T19:24:31.010075-08:00"}
|
||||
{"id":"bd-fl4","title":"Test sync branch setup","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-11-30T00:26:47.520507-08:00","updated_at":"2025-11-30T00:33:23.105998-08:00","closed_at":"2025-11-30T00:33:23.105998-08:00"}
|
||||
{"id":"bd-ge7","title":"Improve Beads test coverage from 46% to 80%","description":"","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-11-20T21:21:03.700271-05:00","updated_at":"2025-11-28T22:17:12.608871-08:00","closed_at":"2025-11-28T21:56:04.085939-08:00"}
|
||||
{"id":"bd-ghb","title":"Add --yes flag to bd doctor --fix for non-interactive mode","description":"## Feature Request\n\nAdd a `--yes` or `-y` flag to `bd doctor --fix` that automatically confirms all prompts, enabling non-interactive usage in scripts and CI/CD pipelines.\n\n## Current Behavior\n`bd doctor --fix` prompts for confirmation before applying fixes, which blocks automated workflows.\n\n## Desired Behavior\n`bd doctor --fix --yes` should apply all fixes without prompting.\n\n## Use Cases\n- CI/CD pipelines that need to auto-fix issues\n- Scripts that automate repository setup\n- Pre-commit hooks that want to silently fix issues","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-11-26T23:22:45.486584-08:00","updated_at":"2025-11-28T22:17:12.609134-08:00","closed_at":"2025-11-28T21:55:06.895066-08:00"}
|
||||
{"id":"bd-gqo","title":"Implement health checks in daemon event loop","description":"Add health checks to checkDaemonHealth() function in daemon_event_loop.go:170:\n- Database integrity check\n- Disk space check\n- Memory usage check\n\nCurrently it's just a no-op placeholder.","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-11-21T18:55:07.534304-05:00","updated_at":"2025-11-29T22:06:06.330972-08:00","closed_at":"2025-11-28T23:10:19.946063-08:00"}
|
||||
@@ -58,7 +57,6 @@
|
||||
{"id":"bd-io0","title":"sync.branch config lost on clone - should be in config.yaml","description":"## Problem\n\nThe sync.branch configuration is stored in the SQLite database, which is gitignored. When contributors clone a repo that uses beads:\n\n1. They get .beads/issues.jsonl (tracked)\n2. They don't get .beads/beads.db (gitignored)\n3. They lose the sync.branch config\n\nWhen they run 'bd init' or 'bd doctor --fix', sync.branch gets auto-set to the current branch (usually 'main'), but if the project uses a dedicated sync branch like 'beads-sync', they'll be committing to the wrong branch.\n\n## Root Cause\n\nsyncbranch.Get() only checks:\n1. BEADS_SYNC_BRANCH env var\n2. Database config (store.GetConfig)\n\nIt never reads from config.yaml, which IS tracked in git and persists across clones.\n\n## Proposed Solution\n\nAdd sync-branch support to config.yaml with this precedence:\n1. BEADS_SYNC_BRANCH env var (highest)\n2. config.yaml sync-branch setting\n3. Database config (legacy/local override)\n4. Auto-detect from current branch (lowest)\n\nChanges needed:\n1. Update syncbranch.Get() to check config.GetString('sync-branch') between env and database\n2. Update config.yaml template in init.go to include sync-branch\n3. Update docs to recommend setting sync-branch in config.yaml for team projects\n4. Consider: bd init --branch should also write to config.yaml, not just database","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-11-30T10:51:29.594627-08:00","updated_at":"2025-11-30T10:54:14.198025-08:00","closed_at":"2025-11-30T10:54:14.198025-08:00"}
|
||||
{"id":"bd-j3zt","title":"Fix mypy errors in beads-mcp","description":"Running `mypy .` in `integrations/beads-mcp` reports 287 errors. These should be addressed to improve type safety and code quality.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-11-20T18:53:28.557708-05:00","updated_at":"2025-11-27T00:54:20.336256-08:00","closed_at":"2025-11-27T00:37:17.188443-08:00"}
|
||||
{"id":"bd-k4b","title":"Enhance dep tree to show full dependency graph","description":"When running `bd dep tree \u003cissue-id\u003e`, the current output only shows the issue itself without its dependency relationships.\n\n## Current Behavior\n\n```\n$ bd dep tree gt-0iqq\n🌲 Dependency tree for gt-0iqq:\n\n→ gt-0iqq: Implement Boss (global overseer) [P2] (open)\n```\n\nThis doesn't show any of the dependency structure.\n\n## Desired Behavior\n\nShow the full dependency DAG rooted at the given issue. For example:\n\n```\n$ bd dep tree gt-0iqq\n🌲 Dependency tree for gt-0iqq:\n\ngt-0iqq: Implement Boss (global overseer) [P2] (open)\n├── gt-0xh4: Boss session management [P2] (open) [READY]\n│ ├── gt-le7c: Boss mail identity [P2] (open)\n│ │ ├── gt-r8fe: Boss human escalation queue [P2] (open)\n│ │ └── gt-vdak: Boss dispatch loop [P2] (open)\n│ │ └── gt-kgy6: Boss resource management [P2] (open)\n│ │ └── gt-93iv: Boss wake daemon [P2] (open)\n│ └── gt-vdak: (shown above)\n```\n\n## Suggested Options\n\n- `--direction=down|up|both` - Show dependents (what this blocks), dependencies (what blocks this), or both\n- `--status=open` - Filter to only show issues with a given status\n- `--depth=N` - Limit tree depth\n- Handle DAG cycles gracefully (show \"(shown above)\" or similar for already-displayed nodes)\n\n## Use Case\n\nWhen reorganizing a set of related issues (like I just did with the Boss implementation), being able to visualize the full dependency graph helps verify the structure is correct before syncing.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-11-25T19:18:18.750649-08:00","updated_at":"2025-11-25T19:50:46.863319-08:00","closed_at":"2025-11-25T19:31:55.312314-08:00"}
|
||||
{"id":"bd-kig","title":"Test worktree sync branch commit","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-11-30T00:38:13.906936-08:00","updated_at":"2025-11-30T00:40:23.609537-08:00","closed_at":"2025-11-30T00:40:23.609537-08:00"}
|
||||
{"id":"bd-l7u","title":"Duplicate DefaultRetentionDays constants","description":"## Problem\n\nThere are now two constants for the same value:\n\n1. `deletions.DefaultRetentionDays = 7` in `internal/deletions/deletions.go:184`\n2. `configfile.DefaultDeletionsRetentionDays = 7` in `internal/configfile/configfile.go:102`\n\n## Impact\n- DRY violation\n- Risk of values getting out of sync\n- Confusing which one to use\n\n## Fix\nRemove the constant from `deletions` package and have it import from `configfile`, or create a shared constants package.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-11-25T12:49:38.356211-08:00","updated_at":"2025-11-25T15:15:21.964842-08:00","closed_at":"2025-11-25T15:15:21.964842-08:00"}
|
||||
{"id":"bd-l954","title":"Performance Testing Framework","description":"Add comprehensive performance testing for beads focusing on optimization guidance and validating 10K+ database scale. Uses standard Go tooling, follows existing patterns, minimal complexity.\n\nComponents:\n- Benchmark suite for critical operations at 10K-20K scale\n- Fixture generator for realistic test data (epic hierarchies, cross-links)\n- User diagnostics via bd doctor --perf\n- Always-on profiling integration\n\nGoals:\n- Identify bottlenecks for optimization work\n- Validate performance at 10K+ issue scale\n- Enable users to collect diagnostics for bug reports\n- Support both SQLite and JSONL import paths","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-11-13T22:22:11.203467-08:00","updated_at":"2025-11-29T22:06:06.331232-08:00","closed_at":"2025-11-28T23:07:57.285628-08:00"}
|
||||
{"id":"bd-m0w","title":"Add test coverage for internal/validation package","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-11-20T21:21:24.129559-05:00","updated_at":"2025-11-28T22:17:12.609385-08:00","closed_at":"2025-11-28T21:52:34.198974-08:00","dependencies":[{"issue_id":"bd-m0w","depends_on_id":"bd-ge7","type":"blocks","created_at":"2025-11-20T21:21:31.350477-05:00","created_by":"daemon"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"database": "beads.db",
|
||||
"jsonl_export": "issues.jsonl",
|
||||
"last_bd_version": "0.27.0"
|
||||
"last_bd_version": "0.27.2"
|
||||
}
|
||||
Reference in New Issue
Block a user