diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index efe6d55a..85f482d5 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -188,10 +188,46 @@ {"id":"bd-269","title":"Add label and title filtering to bd list","description":"Add --label and --title flags to bd list command for better filtering. Labels backend already exists, just need CLI exposure. Title search needs both backend and CLI implementation.","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-10-15T23:49:08.199238-07:00","updated_at":"2025-10-16T01:00:55.696937-07:00","closed_at":"2025-10-15T23:52:07.347894-07:00","external_ref":"gh-45"} {"id":"bd-27","title":"Cache compiled regexes in replaceIDReferences for performance","description":"replaceIDReferences() compiles the same regex patterns on every call. With 100 issues and 10 ID mappings, that's 1000 regex compilations. Pre-compile regexes once and reuse. Can use a struct with compiled regex, placeholder, and newID. Located in collision.go:329. Estimated performance improvement: 10-100x for large batches.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-10-14T14:43:06.911892-07:00","updated_at":"2025-10-16T01:00:55.697842-07:00","closed_at":"2025-10-15T03:01:29.570955-07:00"} {"id":"bd-270","title":"Detect and handle Git merge conflicts in JSONL auto-import","description":"","design":"**Problem**: Git merge conflicts in .beads/issues.jsonl break auto-import silently. When JSONL contains conflict markers (\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD, =======, \u003e\u003e\u003e\u003e\u003e\u003e\u003e), JSON parser fails and entire import is skipped. System only shows parse error but doesn't identify it as a merge conflict.\n\n**Impact**: Critical - blocks all auto-import until manually resolved.\n\n**Solution**:\n1. Add pre-parse merge conflict detection in autoImportIfNewer()\n2. Check for conflict markers before JSON parsing\n3. Provide helpful error message with resolution instructions\n4. Consider auto-resolution strategies:\n - Parse each section separately (HEAD vs incoming)\n - Detect collisions between sections\n - Auto-resolve with --resolve-collisions logic\n - OR abort with clear merge resolution instructions\n\n**Code locations**:\n- cmd/bd/main.go:autoImportIfNewer() (lines 164-398)\n- cmd/bd/import.go (manual import with better error handling)\n- internal/storage/sqlite/collision.go (collision detection)","acceptance_criteria":"- Pre-parse detection catches merge conflict markers\n- Clear error message identifies it as merge conflict\n- Error message includes resolution steps\n- Test case with synthetic merge conflict\n- Consider: automatic merge resolution (stretch goal)","status":"closed","priority":0,"issue_type":"bug","assignee":"amp","created_at":"2025-10-16T00:32:32.459577-07:00","updated_at":"2025-10-16T01:00:55.698222-07:00","closed_at":"2025-10-16T00:35:43.559463-07:00"} +{"id":"bd-271","title":"Epic: Git-Based Auto-Sync for Multi-Device Support","description":"Implement git-based auto-sync to enable multi-device workflows while maintaining beads' local-first, lightweight philosophy. Build on existing JSONL export/import infrastructure and collision detection.","design":"See DESIGN-GIT-SYNC.md for comprehensive architectural design.\n\nCore principle: Git + JSONL remains source of truth. No required server. Optional lightweight sync gateway for users who want push-button multi-device support.","acceptance_criteria":"- Phase 1: Enhanced git-based sync (no server) completed\n- Phase 2: Optional bd serve gateway implemented\n- Phase 3: Client gateway integration working\n- Phase 4: Production-ready with CRDT conflict resolution\n- All existing functionality preserved (backward compatible)\n- Documentation complete\n\n---","status":"open","priority":1,"issue_type":"epic","created_at":"2025-10-16T01:40:04.227913-07:00","updated_at":"2025-10-16T01:40:04.227913-07:00","dependencies":[{"issue_id":"bd-271","depends_on_id":"bd-272","type":"parent-child","created_at":"2025-10-16T01:40:18.186657-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-273","type":"parent-child","created_at":"2025-10-16T01:40:18.19052-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-274","type":"parent-child","created_at":"2025-10-16T01:40:18.227691-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-275","type":"parent-child","created_at":"2025-10-16T01:40:18.358946-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-276","type":"parent-child","created_at":"2025-10-16T01:40:18.396857-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-278","type":"parent-child","created_at":"2025-10-16T01:40:18.433358-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-277","type":"parent-child","created_at":"2025-10-16T01:40:18.434667-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-279","type":"parent-child","created_at":"2025-10-16T01:40:18.7133-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-280","type":"parent-child","created_at":"2025-10-16T01:40:18.885365-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-281","type":"parent-child","created_at":"2025-10-16T01:40:25.063004-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-282","type":"parent-child","created_at":"2025-10-16T01:40:25.368669-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-283","type":"parent-child","created_at":"2025-10-16T01:40:25.561328-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-284","type":"parent-child","created_at":"2025-10-16T01:40:25.719002-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-285","type":"parent-child","created_at":"2025-10-16T01:40:25.87597-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-286","type":"parent-child","created_at":"2025-10-16T01:40:26.06065-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-287","type":"parent-child","created_at":"2025-10-16T01:40:26.3263-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-288","type":"parent-child","created_at":"2025-10-16T01:40:26.546026-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-289","type":"parent-child","created_at":"2025-10-16T01:40:26.994076-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-290","type":"parent-child","created_at":"2025-10-16T01:40:27.398992-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-291","type":"parent-child","created_at":"2025-10-16T01:40:27.997735-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-292","type":"parent-child","created_at":"2025-10-16T01:40:28.397517-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-293","type":"parent-child","created_at":"2025-10-16T01:40:28.794089-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-294","type":"parent-child","created_at":"2025-10-16T01:40:29.196323-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-295","type":"parent-child","created_at":"2025-10-16T01:40:29.400404-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-296","type":"parent-child","created_at":"2025-10-16T01:40:29.723038-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-297","type":"parent-child","created_at":"2025-10-16T01:40:30.127273-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-298","type":"parent-child","created_at":"2025-10-16T01:40:31.032343-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-299","type":"parent-child","created_at":"2025-10-16T01:40:31.29951-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-300","type":"parent-child","created_at":"2025-10-16T01:40:31.456756-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-301","type":"parent-child","created_at":"2025-10-16T01:40:32.073344-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-302","type":"parent-child","created_at":"2025-10-16T01:40:32.491146-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-303","type":"parent-child","created_at":"2025-10-16T01:40:32.787148-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-304","type":"parent-child","created_at":"2025-10-16T01:40:33.073052-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-305","type":"parent-child","created_at":"2025-10-16T01:40:33.384848-07:00","created_by":"stevey"},{"issue_id":"bd-271","depends_on_id":"bd-306","type":"parent-child","created_at":"2025-10-16T01:40:33.983943-07:00","created_by":"stevey"}]} +{"id":"bd-272","title":"Phase 1: Implement bd sync command","description":"Create bd sync command to manually synchronize with git remote in a single operation.","design":"Command should:\n1. Export pending changes to JSONL\n2. Commit changes to git\n3. Pull from remote (with conflict resolution)\n4. Push local commits to remote\n\nWraps the entire sync workflow in one command for better UX.","acceptance_criteria":"- bd sync command implemented\n- Exports dirty changes to JSONL automatically\n- Commits to git with descriptive message\n- Pulls and handles merge conflicts\n- Auto-imports updated JSONL\n- Pushes to remote\n- Error handling for git failures\n- Tests cover success and failure scenarios\n- Documentation in README.md\n\n---","status":"open","priority":1,"issue_type":"feature","created_at":"2025-10-16T01:40:04.246855-07:00","updated_at":"2025-10-16T01:40:04.246855-07:00","dependencies":[{"issue_id":"bd-272","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:04.252353-07:00","created_by":"stevey"}]} +{"id":"bd-273","title":"Phase 1: Implement bd daemon command","description":"Create bd daemon command to run background sync process with configurable interval.","design":"Daemon should:\n- Run in background (fork or systemd service)\n- Poll for changes at configurable interval (default: 5 minutes)\n- Export dirty issues to JSONL\n- Auto-commit if --auto-commit flag set\n- Auto-push if --auto-push flag set\n- Pull remote changes periodically\n- Auto-import when remote changes detected\n- Log sync activity\n\nCommand flags:\n- --interval=5m (sync check interval)\n- --auto-commit (automatically commit changes)\n- --auto-push (automatically push commits)\n- --stop (stop running daemon)\n- --status (show daemon status)","acceptance_criteria":"- bd daemon command implemented\n- Background process management working\n- Configurable sync interval\n- Auto-commit functionality\n- Auto-push functionality\n- PID file for process management\n- Graceful shutdown on SIGTERM\n- Logging to file or syslog\n- Status command shows daemon state\n- Tests for daemon lifecycle\n- Documentation in README.md\n\n---","status":"open","priority":1,"issue_type":"feature","created_at":"2025-10-16T01:40:04.263802-07:00","updated_at":"2025-10-16T01:40:04.263802-07:00","dependencies":[{"issue_id":"bd-273","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:04.304905-07:00","created_by":"stevey"}]} +{"id":"bd-274","title":"Phase 1: Create enhanced git hooks examples","description":"Create comprehensive git hooks in examples/git-hooks/ for immediate sync without daemon.","design":"Hooks to create:\n1. post-commit: Force immediate export, amend commit with JSONL changes\n2. post-merge: Auto-import with collision resolution\n3. pre-push: Ensure JSONL is up-to-date\n4. post-checkout: Auto-import when switching branches\n\nInstallation script: examples/git-hooks/install.sh","acceptance_criteria":"- post-commit hook that auto-exports\n- post-merge hook that auto-imports with --resolve-collisions\n- pre-push hook validates JSONL is synced\n- post-checkout hook imports branch changes\n- install.sh script copies hooks to .git/hooks/\n- Documentation in examples/git-hooks/README.md\n- Hooks are executable\n- Error handling in all hooks\n- Tests verify hook behavior\n\n---","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-16T01:40:04.313104-07:00","updated_at":"2025-10-16T01:40:04.313104-07:00","dependencies":[{"issue_id":"bd-274","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:04.348283-07:00","created_by":"stevey"}]} +{"id":"bd-275","title":"Phase 1: Implement three-way merge for conflicts","description":"Implement three-way merge algorithm to intelligently resolve conflicts by comparing base, local, and remote versions.","design":"Three-way merge logic:\n- Get base version from git history (last common ancestor)\n- Compare local vs base: if same, use remote (remote changed)\n- Compare remote vs base: if same, use local (local changed)\n- If both changed: mark as conflict for manual resolution\n\nField-by-field merging for Issue type:\n- title, description, design, acceptance_criteria, notes (text fields)\n- status, priority, issue_type (enum fields)\n- labels (set merge - union)\n- dependencies (set merge - union)\n\nReturn MergeResult with:\n- MergedVersion (auto-merged fields)\n- Conflicts (list of fields requiring manual resolution)","acceptance_criteria":"- ThreeWayMerge function implemented\n- GetLastSyncedVersion retrieves git base version\n- Field-by-field merge logic for all Issue fields\n- Union merge for labels and dependencies\n- Conflict detection for incompatible changes\n- MergeResult type defined\n- Integration with import collision detection\n- Tests cover all merge scenarios\n- Documentation in DESIGN-GIT-SYNC.md\n\n---","status":"open","priority":1,"issue_type":"feature","created_at":"2025-10-16T01:40:04.458957-07:00","updated_at":"2025-10-16T01:40:04.458957-07:00","dependencies":[{"issue_id":"bd-275","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:04.512545-07:00","created_by":"stevey"}]} +{"id":"bd-276","title":"Phase 1: Add version vectors for causal ordering","description":"Add optional version vector metadata to Issues for detecting causal relationships and enabling better conflict resolution.","design":"Add sync_metadata to Issue JSON:\n```json\n{\n \"sync_metadata\": {\n \"version\": 3,\n \"last_modified_by\": \"device-a\",\n \"version_vector\": {\n \"device-a\": 2,\n \"device-b\": 1\n }\n }\n}\n```\n\nVersion vector tracks logical clock per device:\n- Incremented on each update\n- Used to determine causality (happened-before)\n- Enables automatic conflict resolution for concurrent edits\n\nOptional field - backward compatible with existing JSONL.","acceptance_criteria":"- SyncMetadata type defined\n- Version vector in Issue struct (optional)\n- Device ID generation and storage\n- Increment version on update\n- Version vector comparison functions\n- Causal ordering detection\n- Integration with collision detection\n- Backward compatible JSONL parsing\n- Tests for version vector logic\n- Documentation in DESIGN-GIT-SYNC.md\n\n---","status":"open","priority":2,"issue_type":"feature","created_at":"2025-10-16T01:40:04.54724-07:00","updated_at":"2025-10-16T01:40:04.54724-07:00","dependencies":[{"issue_id":"bd-276","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:04.602868-07:00","created_by":"stevey"}]} +{"id":"bd-277","title":"Phase 1: Improve collision UX with interactive resolution","description":"Enhance collision handling UX with interactive prompts for users to choose resolution strategy.","design":"When collision detected during sync, prompt:\n```\n⚠ Collision detected on bd-10 (conflicting fields: priority, title)\n\nOptions:\n 1. Keep local change\n 2. Accept remote change\n 3. Remap remote to new ID (recommended)\n 4. Resolve manually\n\nChoose [1-4]:\n```\n\nAdd bd resolve command for manual resolution:\n- Opens editor with three-way diff\n- User edits merged version\n- Validates and applies resolution","acceptance_criteria":"- Interactive collision prompt implemented\n- User can choose resolution strategy\n- bd resolve command implemented\n- Three-way diff display in editor\n- Manual edit and apply workflow\n- Validation of resolved version\n- Tests for all resolution paths\n- Documentation in README.md\n\n---","status":"open","priority":2,"issue_type":"feature","created_at":"2025-10-16T01:40:04.783143-07:00","updated_at":"2025-10-16T01:40:04.783143-07:00","dependencies":[{"issue_id":"bd-277","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:04.793714-07:00","created_by":"stevey"}]} +{"id":"bd-278","title":"Phase 1: Add sync state machine tracking","description":"Implement sync state tracking to show users current sync status and guide next actions.","design":"Sync states:\n- clean: DB = JSONL = Git (all synced)\n- dirty: DB ≠ JSONL (pending flush)\n- conflict: JSONL ≠ DB (collision detected)\n- ahead: Local commits not pushed\n- behind: Remote commits not pulled\n- diverged: Both ahead and behind\n\nAdd CheckSyncState() function that:\n- Checks dirty issues count\n- Runs git status to check ahead/behind\n- Compares JSONL hash with DB\n- Returns SyncState\n\nDisplay in bd status command.","acceptance_criteria":"- SyncState enum defined\n- CheckSyncState() implemented\n- Git status parsing (ahead/behind commits)\n- Dirty issues detection\n- JSONL hash comparison\n- bd status shows sync state\n- Color-coded status display\n- Guidance on next action\n- Tests for all states\n- Documentation in README.md\n\n---","status":"open","priority":2,"issue_type":"feature","created_at":"2025-10-16T01:40:04.796655-07:00","updated_at":"2025-10-16T01:40:04.796655-07:00","dependencies":[{"issue_id":"bd-278","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:04.801188-07:00","created_by":"stevey"}]} +{"id":"bd-279","title":"Phase 1: Add tests for concurrent edit scenarios","description":"Create comprehensive test suite for concurrent editing scenarios across multiple devices.","design":"Test scenarios:\n1. Two devices edit different fields (should merge cleanly)\n2. Two devices edit same field (collision)\n3. One device edits closed issue (local wins)\n4. Race condition: simultaneous push (git handles)\n5. Three-way merge with base version\n6. Version vector causal ordering\n7. Union merge for labels\n8. Dependency conflict resolution\n\nUse test fixtures with pre-created git history.","acceptance_criteria":"- Test suite in cmd/bd/sync_test.go\n- All 8+ concurrent edit scenarios covered\n- Test fixtures with git history\n- Mock git operations where needed\n- Tests verify correct merge behavior\n- Tests verify collision detection\n- Tests run in CI\n- Documentation in test comments\n\n---","status":"open","priority":1,"issue_type":"task","created_at":"2025-10-16T01:40:04.815486-07:00","updated_at":"2025-10-16T01:40:04.815486-07:00","dependencies":[{"issue_id":"bd-279","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:04.823588-07:00","created_by":"stevey"}]} {"id":"bd-28","title":"Improve error handling in dependency removal during remapping","description":"In updateDependencyReferences(), RemoveDependency errors are caught and ignored with continue (line 392). Comment says 'if dependency doesn't exist' but this catches ALL errors including real failures. Should check error type with errors.Is(err, ErrDependencyNotFound) and only ignore not-found errors, returning other errors properly.","status":"open","priority":3,"issue_type":"bug","created_at":"2025-10-14T14:43:06.912228-07:00","updated_at":"2025-10-16T01:00:55.698654-07:00"} +{"id":"bd-280","title":"Phase 1: Document git-based sync workflow","description":"Add comprehensive documentation for git-based sync workflow to README.md and create dedicated SYNC.md guide.","design":"Documentation should cover:\n- Manual git workflow (current)\n- bd sync command usage\n- bd daemon for background sync\n- Git hooks installation\n- Conflict resolution strategies\n- Troubleshooting common issues\n- Best practices for multi-device work\n\nCreate SYNC.md with:\n- Quick start guide\n- Detailed workflow examples\n- Conflict resolution guide\n- FAQ section","acceptance_criteria":"- README.md updated with sync overview\n- SYNC.md created with detailed guide\n- Examples for all sync workflows\n- Conflict resolution examples\n- Troubleshooting section\n- FAQ section\n- Diagrams for workflows (optional)\n- Links from AGENTS.md\n\n---","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-16T01:40:04.828228-07:00","updated_at":"2025-10-16T01:40:04.828228-07:00","dependencies":[{"issue_id":"bd-280","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:04.831785-07:00","created_by":"stevey"}]} +{"id":"bd-281","title":"Phase 2: Implement bd serve command","description":"Create bd serve command to start HTTP API gateway server that wraps bd CLI commands.","design":"Gateway server provides:\n- REST API wrapping bd commands\n- WebSocket for real-time notifications\n- API key authentication\n- Auto-commit on changes\n- Periodic git pull\n- Webhook notifications to clients\n\nCommand flags:\n- --port=8080 (HTTP port)\n- --api-key=\u003ckey\u003e (auth key, auto-generated if not provided)\n- --auto-commit (commit changes immediately)\n- --auto-pull=5m (pull interval)\n- --allowed-ips=\u003clist\u003e (IP whitelist)\n\nArchitecture: Thin wrapper that executes bd CLI commands and manages git operations.","acceptance_criteria":"- bd serve command implemented\n- HTTP server with route handlers\n- API key authentication\n- Auto-commit on CRUD operations\n- Background git pull task\n- WebSocket server for notifications\n- Graceful shutdown on SIGTERM\n- Logging of all API requests\n- Tests for server lifecycle\n- Documentation in README.md\n\n---","status":"open","priority":1,"issue_type":"feature","created_at":"2025-10-16T01:40:04.837681-07:00","updated_at":"2025-10-16T01:40:04.837681-07:00","dependencies":[{"issue_id":"bd-281","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:04.846934-07:00","created_by":"stevey"}]} +{"id":"bd-282","title":"Phase 2: Implement REST API endpoints","description":"Implement REST API endpoints that wrap bd CLI commands for remote access.","design":"API endpoints:\n- GET /api/health - server status\n- GET /api/sync/status - git sync state\n- POST /api/sync/pull - trigger pull + import\n- POST /api/sync/push - trigger export + push\n- GET /api/issues - list issues\n- POST /api/issues - create issue\n- GET /api/issues/:id - get issue\n- PATCH /api/issues/:id - update issue\n- DELETE /api/issues/:id - close issue\n- POST /api/issues/:id/labels - add label\n- DELETE /api/issues/:id/labels/:l - remove label\n- POST /api/issues/:id/deps - add dependency\n- DELETE /api/issues/:id/deps/:d - remove dependency\n\nAll endpoints return JSON.\nAll mutations require authentication.\nAll responses include proper HTTP status codes.","acceptance_criteria":"- All API endpoints implemented\n- Handlers wrap bd CLI commands\n- JSON request/response format\n- Proper HTTP status codes\n- Error responses with details\n- Authentication on mutation endpoints\n- CORS headers for web clients\n- Rate limiting (optional)\n- API tests for all endpoints\n- OpenAPI/Swagger spec\n- Documentation in API.md\n\n---","status":"open","priority":1,"issue_type":"feature","created_at":"2025-10-16T01:40:04.859296-07:00","updated_at":"2025-10-16T01:40:04.859296-07:00","dependencies":[{"issue_id":"bd-282","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:04.871365-07:00","created_by":"stevey"}]} +{"id":"bd-283","title":"Phase 2: Implement WebSocket notifications","description":"Implement WebSocket server for real-time push notifications to connected clients.","design":"WebSocket protocol:\n- Client subscribes to events (issue.created, issue.updated, etc.)\n- Server pushes notifications when events occur\n- Clients can filter by status, priority, labels\n- Heartbeat to detect disconnections\n\nEvents:\n- issue.created\n- issue.updated\n- issue.closed\n- sync.required\n- sync.complete\n\nMessage format: JSON with type, timestamp, data.","acceptance_criteria":"- WebSocket server at /api/subscribe\n- Client subscription with filters\n- Event notification on CRUD ops\n- Heartbeat/ping-pong\n- Client disconnect handling\n- Reconnection support\n- Multiple concurrent clients\n- Tests for WebSocket protocol\n- Client library example (Go)\n- Documentation in API.md\n\n---","status":"open","priority":2,"issue_type":"feature","created_at":"2025-10-16T01:40:04.872427-07:00","updated_at":"2025-10-16T01:40:04.872427-07:00","dependencies":[{"issue_id":"bd-283","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:04.90243-07:00","created_by":"stevey"}]} +{"id":"bd-284","title":"Phase 2: Create Docker packaging for gateway","description":"Create Dockerfile and docker-compose.yml for easy gateway deployment.","design":"Multi-stage Dockerfile:\n1. Builder stage: compile Go binary\n2. Runtime stage: Alpine with git, sqlite\n3. Initialize git config\n4. Expose port 8080\n5. Volume mount for /data\n\ndocker-compose.yml:\n- Service: beads-gateway\n- Environment variables for config\n- Volume mount for persistence\n- Restart policy\n\nInclude .dockerignore for efficient builds.","acceptance_criteria":"- Dockerfile with multi-stage build\n- docker-compose.yml with config\n- .dockerignore file\n- Build script (scripts/docker-build.sh)\n- Environment variable configuration\n- Volume mount for data persistence\n- README.md with Docker instructions\n- Published to Docker Hub (optional)\n- Tests for Docker deployment\n- Documentation in DEPLOYMENT.md\n\n---","status":"open","priority":1,"issue_type":"task","created_at":"2025-10-16T01:40:04.954858-07:00","updated_at":"2025-10-16T01:40:04.954858-07:00","dependencies":[{"issue_id":"bd-284","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:04.969017-07:00","created_by":"stevey"}]} +{"id":"bd-285","title":"Phase 2: Implement API key authentication","description":"Implement secure API key authentication for gateway API access.","design":"Authentication:\n- Bearer token in Authorization header\n- Single API key for personal use\n- Optional IP whitelist for additional security\n- Generate secure random key on first start\n- Store hashed key in config file\n\nAPI key generation:\n- 32 bytes of crypto/rand\n- Base64 encoded\n- Display once on generation\n\nConfig storage:\n- ~/.beads/gateway-config.json\n- Contains hashed API key\n- Optional allowed_ips list","acceptance_criteria":"- API key generation function\n- Secure storage in config file\n- Bearer token authentication\n- Middleware for auth checking\n- IP whitelist support (optional)\n- 401 response for invalid auth\n- Key rotation support\n- Tests for authentication\n- Documentation in SECURITY.md\n\n---","status":"open","priority":1,"issue_type":"feature","created_at":"2025-10-16T01:40:04.981129-07:00","updated_at":"2025-10-16T01:40:04.981129-07:00","dependencies":[{"issue_id":"bd-285","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:05.023891-07:00","created_by":"stevey"}]} +{"id":"bd-286","title":"Phase 2: Add gateway stress tests","description":"Create stress tests to validate gateway performance under load and ensure it can handle production traffic.","design":"Test scenarios:\n1. Concurrent request handling (100+ clients)\n2. Large issue database (10,000+ issues)\n3. WebSocket connection limits\n4. Git lock contention\n5. Memory usage under load\n6. Response time percentiles (p50, p95, p99)\n\nUse Go testing tools:\n- testing.B for benchmarks\n- net/http/httptest for server testing\n- goroutines for concurrent clients","acceptance_criteria":"- Stress test suite in cmd/bd/serve_stress_test.go\n- Concurrent client test (100+ requests/sec)\n- Large database test (10k+ issues)\n- WebSocket stress test\n- Memory profiling test\n- Response time benchmarks\n- Git operation serialization test\n- Performance regression detection\n- Documentation in PERFORMANCE.md\n\n---","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-16T01:40:05.069008-07:00","updated_at":"2025-10-16T01:40:05.069008-07:00","dependencies":[{"issue_id":"bd-286","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:05.087128-07:00","created_by":"stevey"}]} +{"id":"bd-287","title":"Phase 2: Create API client library (Go)","description":"Create Go client library for accessing beads gateway API.","design":"Client library should provide:\n- Type-safe API calls\n- Authentication handling\n- Error handling and retries\n- WebSocket subscription\n- Automatic reconnection\n- Context support for cancellation\n\nPackage: github.com/steveyegge/beads/client\n\nExample usage:\n```go\nclient := beads.NewClient(\"http://gateway:8080\", \"api-key\")\nissue, err := client.GetIssue(ctx, \"bd-10\")\n```","acceptance_criteria":"- Go client library package\n- All API endpoints wrapped\n- Type-safe request/response\n- Authentication handling\n- Retry logic for transient errors\n- WebSocket client support\n- Context support\n- Example usage in examples/\n- Tests for client library\n- Documentation in CLIENT.md\n\n---","status":"open","priority":2,"issue_type":"feature","created_at":"2025-10-16T01:40:05.106235-07:00","updated_at":"2025-10-16T01:40:05.106235-07:00","dependencies":[{"issue_id":"bd-287","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:05.125384-07:00","created_by":"stevey"}]} +{"id":"bd-288","title":"Phase 2: Document gateway API","description":"Create comprehensive API documentation for gateway with examples and OpenAPI spec.","design":"Documentation should include:\n- Authentication guide\n- All endpoint descriptions\n- Request/response examples\n- Error codes and handling\n- WebSocket protocol\n- Rate limits\n- Best practices\n\nCreate OpenAPI 3.0 specification for:\n- Automated client generation\n- API testing tools\n- Documentation generation","acceptance_criteria":"- API.md with full documentation\n- OpenAPI 3.0 spec (api-spec.yaml)\n- Request/response examples for all endpoints\n- Authentication examples\n- WebSocket protocol documentation\n- Error response documentation\n- Code examples in multiple languages\n- Postman collection (optional)\n- Link from README.md\n\n---","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-16T01:40:05.130732-07:00","updated_at":"2025-10-16T01:40:05.130732-07:00","dependencies":[{"issue_id":"bd-288","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:05.163649-07:00","created_by":"stevey"}]} +{"id":"bd-289","title":"Phase 3: Implement bd config command for gateway","description":"Create bd config command to manage gateway configuration for transparent client-side gateway use.","design":"Config commands:\n- bd config set gateway \u003curl\u003e\n- bd config set api_key \u003ckey\u003e\n- bd config get gateway\n- bd config get api_key\n- bd config unset gateway\n- bd config list\n\nConfig storage: ~/.beads/config.json\n\nConfig keys:\n- gateway_url: URL of gateway server\n- api_key: Authentication key\n- auto_sync: Enable background sync\n- sync_interval: Sync check interval","acceptance_criteria":"- bd config command implemented\n- Set/get/unset/list subcommands\n- Config file at ~/.beads/config.json\n- Validation of config values\n- Secure storage of API key\n- Tests for config operations\n- Documentation in README.md\n\n---","status":"open","priority":1,"issue_type":"feature","created_at":"2025-10-16T01:40:05.174759-07:00","updated_at":"2025-10-16T01:40:05.174759-07:00","dependencies":[{"issue_id":"bd-289","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:05.247508-07:00","created_by":"stevey"}]} {"id":"bd-29","title":"Use safer placeholder pattern in replaceIDReferences","description":"Currently uses __PLACEHOLDER_0__ which could theoretically collide with user text. Use a truly unique placeholder like null bytes: \\x00REMAP\\x00_0_\\x00 which are unlikely to appear in normal text. Located in collision.go:324. Very low probability issue but worth fixing for completeness.","status":"open","priority":3,"issue_type":"task","created_at":"2025-10-14T14:43:06.912567-07:00","updated_at":"2025-10-16T01:00:55.699034-07:00"} +{"id":"bd-290","title":"Phase 3: Add transparent gateway detection","description":"Modify bd commands to transparently use gateway API when configured, with automatic fallback to local storage.","design":"Update storage layer to:\n1. Check for gateway config\n2. If gateway configured, use GatewayClient\n3. If gateway unavailable, fall back to local SQLite\n4. Cache gateway responses for offline use\n\nTransparent for these commands:\n- bd create\n- bd update\n- bd close\n- bd list\n- bd show\n- bd label\n- bd dep\n\nNo changes to command interface - works identically.","acceptance_criteria":"- Gateway detection in storage layer\n- GatewayClient wraps API calls\n- Automatic fallback to local on error\n- Response caching for offline mode\n- All CRUD commands work via gateway\n- Offline mode preserves functionality\n- Tests for gateway mode\n- Tests for fallback behavior\n- Documentation in README.md\n\n---","status":"open","priority":1,"issue_type":"feature","created_at":"2025-10-16T01:40:05.266164-07:00","updated_at":"2025-10-16T01:40:05.266164-07:00","dependencies":[{"issue_id":"bd-290","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:05.305433-07:00","created_by":"stevey"}]} +{"id":"bd-291","title":"Phase 3: Implement client-side sync daemon","description":"Create client-side background sync daemon for automatic synchronization with gateway.","design":"Sync daemon:\n- Runs in background\n- Polls gateway for updates every 30s\n- Pushes local changes to gateway\n- Handles sync conflicts\n- Logs sync activity\n\nCommands:\n- bd sync-daemon start\n- bd sync-daemon stop\n- bd sync-daemon status\n\nUses gateway WebSocket for real-time updates if available.","acceptance_criteria":"- Client sync daemon implemented\n- Background process management\n- Polling gateway for changes\n- Push local changes to gateway\n- WebSocket subscription for real-time\n- Conflict resolution\n- PID file management\n- Status command\n- Tests for sync daemon\n- Documentation in README.md\n\n---","status":"open","priority":2,"issue_type":"feature","created_at":"2025-10-16T01:40:05.332847-07:00","updated_at":"2025-10-16T01:40:05.332847-07:00","dependencies":[{"issue_id":"bd-291","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:05.339875-07:00","created_by":"stevey"}]} +{"id":"bd-292","title":"Phase 3: Add WebSocket subscription client","description":"Implement WebSocket client for subscribing to gateway notifications and receiving real-time updates.","design":"WebSocket client:\n- Connects to gateway /api/subscribe\n- Sends subscription request with filters\n- Receives event notifications\n- Handles disconnection and reconnection\n- Updates local DB on events\n\nIntegration with sync daemon:\n- Daemon subscribes to all events\n- On notification, triggers immediate sync\n- Reduces polling overhead","acceptance_criteria":"- WebSocket client implementation\n- Subscription with event filters\n- Event handler callbacks\n- Auto-reconnection logic\n- Integration with sync daemon\n- Local DB update on events\n- Connection state management\n- Tests for WebSocket client\n- Documentation in CLIENT.md\n\n---","status":"open","priority":2,"issue_type":"feature","created_at":"2025-10-16T01:40:05.365886-07:00","updated_at":"2025-10-16T01:40:05.365886-07:00","dependencies":[{"issue_id":"bd-292","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:05.400548-07:00","created_by":"stevey"}]} +{"id":"bd-293","title":"Phase 3: Add offline mode with local cache","description":"Implement offline mode that caches gateway responses locally for continued operation when gateway is unavailable.","design":"Offline cache:\n- SQLite cache of gateway responses\n- Automatic cache population on sync\n- Serve reads from cache when offline\n- Queue writes for later sync\n- Conflict detection on reconnect\n\nCache strategy:\n- Read-through: Check cache, then gateway\n- Write-behind: Queue, sync on reconnect\n- TTL for cache entries\n- Manual cache clear command","acceptance_criteria":"- Local cache database\n- Read-through caching\n- Write queue for offline writes\n- Sync queued writes on reconnect\n- Conflict detection after offline\n- Cache TTL and expiration\n- bd cache command (clear, status)\n- Tests for offline scenarios\n- Documentation in README.md\n\n---","status":"open","priority":2,"issue_type":"feature","created_at":"2025-10-16T01:40:05.417619-07:00","updated_at":"2025-10-16T01:40:05.417619-07:00","dependencies":[{"issue_id":"bd-293","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:05.451729-07:00","created_by":"stevey"}]} +{"id":"bd-294","title":"Phase 3: Create gateway integration tests","description":"Create end-to-end integration tests that verify gateway and client working together.","design":"Integration test scenarios:\n1. Client connects to gateway\n2. Create issue via gateway\n3. List issues via gateway\n4. Update issue via gateway\n5. WebSocket notification received\n6. Sync between multiple clients\n7. Offline mode and reconnect\n8. Conflict resolution\n\nUse Docker Compose to spin up gateway for tests.","acceptance_criteria":"- Integration test suite\n- Docker Compose for test environment\n- All CRUD operations tested\n- WebSocket notification test\n- Multi-client sync test\n- Offline/reconnect test\n- Conflict resolution test\n- Tests run in CI\n- Documentation in TESTING.md\n\n---","status":"open","priority":1,"issue_type":"task","created_at":"2025-10-16T01:40:05.457079-07:00","updated_at":"2025-10-16T01:40:05.457079-07:00","dependencies":[{"issue_id":"bd-294","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:05.485909-07:00","created_by":"stevey"}]} +{"id":"bd-295","title":"Phase 3: Document client gateway setup","description":"Create comprehensive documentation for setting up and using gateway mode.","design":"Documentation should cover:\n- Gateway deployment (Docker)\n- Client configuration (bd config)\n- Transparent gateway mode\n- Sync daemon setup\n- Offline mode\n- Troubleshooting\n- Best practices\n\nCreate GATEWAY.md with:\n- Quick start guide\n- Deployment options\n- Configuration reference\n- Usage examples\n- FAQ","acceptance_criteria":"- GATEWAY.md created\n- Quick start guide\n- Deployment instructions (Docker, binary)\n- Client setup instructions\n- Sync daemon guide\n- Offline mode documentation\n- Troubleshooting section\n- FAQ section\n- Links from README.md\n\n---","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-16T01:40:05.562097-07:00","updated_at":"2025-10-16T01:40:05.562097-07:00","dependencies":[{"issue_id":"bd-295","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:05.59082-07:00","created_by":"stevey"}]} +{"id":"bd-296","title":"Phase 4: Implement CRDT for automatic conflict resolution","description":"Implement Conflict-free Replicated Data Type (CRDT) semantics for automatic merge of concurrent edits without conflicts.","design":"CRDT strategies per field type:\n- Single-value fields (title, status): Last-Write-Wins with version vectors\n- Set fields (labels): G-Set (grow-only, union merge)\n- List fields (events): RGA (Replicated Growable Array)\n- Text fields: Operational transforms or delta-based\n\nAdd CRDT metadata:\n- Version vector per device\n- Logical clock per update\n- Tombstones for deletions\n\nRequires sync_metadata in JSONL (optional, backward compatible).","acceptance_criteria":"- CRDT logic for all field types\n- Last-Write-Wins for single-value\n- Union merge for sets\n- RGA for lists\n- Version vector comparison\n- Automatic conflict resolution\n- No manual resolution needed\n- Tests for concurrent updates\n- Documentation in DESIGN-GIT-SYNC.md\n\n---","status":"open","priority":2,"issue_type":"feature","created_at":"2025-10-16T01:40:05.600159-07:00","updated_at":"2025-10-16T01:40:05.600159-07:00","dependencies":[{"issue_id":"bd-296","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:05.60926-07:00","created_by":"stevey"}]} +{"id":"bd-297","title":"Phase 4: Add operational transforms for text fields","description":"Implement operational transforms (OT) for text fields to enable real-time collaborative editing of descriptions and notes.","design":"OT for text fields:\n- description\n- design\n- acceptance_criteria\n- notes\n\nOperations:\n- Insert(pos, text)\n- Delete(pos, len)\n- Transform operations for concurrent edits\n\nRequires real-time sync via WebSocket.\n\nAlternative: Use simpler delta-based approach with three-way merge.","acceptance_criteria":"- OT implementation for text fields\n- Insert/Delete operations\n- Transform function for concurrent ops\n- Integration with WebSocket sync\n- Tests for concurrent text edits\n- Performance acceptable for large text\n- Documentation in DESIGN-GIT-SYNC.md\n\n---","status":"open","priority":3,"issue_type":"feature","created_at":"2025-10-16T01:40:05.76508-07:00","updated_at":"2025-10-16T01:40:05.76508-07:00","dependencies":[{"issue_id":"bd-297","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:05.794036-07:00","created_by":"stevey"}]} +{"id":"bd-298","title":"Phase 4: Add sync status to bd status command","description":"Enhance bd status command to show detailed sync status including gateway connection, sync state, and conflicts.","design":"bd status should display:\n- Sync state (clean/dirty/ahead/behind/diverged/conflict)\n- Gateway connection status (connected/offline)\n- Last sync timestamp\n- Pending changes count\n- Conflicts count\n- Sync daemon status (running/stopped)\n\nFormat:\n```\nSync Status:\n State: clean\n Gateway: connected (http://gateway:8080)\n Last sync: 2 minutes ago\n Pending: 0 issues\n Conflicts: 0\n Daemon: running (PID 12345)\n```","acceptance_criteria":"- Sync status in bd status output\n- Gateway connection check\n- Sync state display\n- Pending changes count\n- Conflicts list\n- Daemon status\n- Color-coded output\n- Tests for status display\n- Documentation in README.md\n\n---","status":"open","priority":2,"issue_type":"feature","created_at":"2025-10-16T01:40:05.917065-07:00","updated_at":"2025-10-16T01:40:05.917065-07:00","dependencies":[{"issue_id":"bd-298","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:06.039914-07:00","created_by":"stevey"}]} +{"id":"bd-299","title":"Phase 4: Add metrics and monitoring","description":"Add metrics collection and monitoring for gateway operations and sync performance.","design":"Metrics to collect:\n- API request count and latency\n- Sync operation count and duration\n- Conflict resolution count\n- WebSocket connection count\n- Git operation duration\n- Database query performance\n\nExpose metrics:\n- Prometheus format at /metrics\n- JSON format at /api/metrics\n\nOptional: Grafana dashboard template.","acceptance_criteria":"- Metrics collection implemented\n- Prometheus exposition format\n- Key metrics covered (requests, latency, sync)\n- /metrics endpoint\n- /api/metrics JSON endpoint\n- Grafana dashboard template\n- Documentation in MONITORING.md\n\n---","status":"open","priority":3,"issue_type":"feature","created_at":"2025-10-16T01:40:06.09006-07:00","updated_at":"2025-10-16T01:40:06.09006-07:00","dependencies":[{"issue_id":"bd-299","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:06.190232-07:00","created_by":"stevey"}]} {"id":"bd-3","title":"Normal task","description":"","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-14T14:43:06.912905-07:00","updated_at":"2025-10-16T01:00:55.69954-07:00"} {"id":"bd-30","title":"Remove unused issueMap in scoreCollisions","description":"scoreCollisions() creates issueMap and populates it (lines 135-138) but never uses it. Either remove it or add a TODO comment explaining future use. Located in collision.go:135-138. Cosmetic cleanup.","status":"open","priority":4,"issue_type":"chore","created_at":"2025-10-14T14:43:06.913242-07:00","updated_at":"2025-10-16T01:00:55.700192-07:00"} +{"id":"bd-300","title":"Phase 4: Create performance benchmarks","description":"Create comprehensive performance benchmarks for sync operations and gateway API.","design":"Benchmarks for:\n1. JSONL import/export performance\n2. Collision detection performance\n3. Three-way merge performance\n4. Gateway API latency\n5. WebSocket throughput\n6. Concurrent client handling\n7. Large database operations (10k+ issues)\n\nUse Go benchmarking and profiling tools.\n\nTrack performance over time in CI.","acceptance_criteria":"- Benchmark suite implemented\n- All key operations benchmarked\n- CPU and memory profiling\n- Large database benchmarks\n- Concurrent operation benchmarks\n- CI integration for regression detection\n- Performance baseline documented\n- Documentation in PERFORMANCE.md\n\n---","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-16T01:40:06.20052-07:00","updated_at":"2025-10-16T01:40:06.20052-07:00","dependencies":[{"issue_id":"bd-300","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:06.423731-07:00","created_by":"stevey"}]} +{"id":"bd-301","title":"Phase 4: Add multi-gateway federation (optional)","description":"Add support for federating multiple gateway instances for distributed team workflows.","design":"Federation allows:\n- Multiple gateways sync with each other\n- Each gateway has authoritative set of issues\n- Peer-to-peer sync protocol\n- Conflict resolution across gateways\n\nArchitecture:\n- Gateway-to-gateway API\n- Peer discovery\n- Sync protocol between gateways\n- Distributed conflict resolution\n\nComplex feature - only if team usage emerges.","acceptance_criteria":"- Gateway federation protocol designed\n- Peer discovery mechanism\n- Gateway-to-gateway sync\n- Distributed conflict resolution\n- Tests for federation\n- Documentation in FEDERATION.md\n\n---","status":"open","priority":4,"issue_type":"feature","created_at":"2025-10-16T01:40:06.429639-07:00","updated_at":"2025-10-16T01:40:06.429639-07:00","dependencies":[{"issue_id":"bd-301","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:06.443166-07:00","created_by":"stevey"}]} +{"id":"bd-302","title":"Phase 4: Create production deployment guide","description":"Create comprehensive production deployment guide for running gateway in production environments.","design":"Guide should cover:\n- Deployment options (Docker, Kubernetes, systemd)\n- Security best practices\n- Monitoring and alerting\n- Backup and recovery\n- Scaling considerations\n- Troubleshooting\n- Maintenance procedures","acceptance_criteria":"- DEPLOYMENT.md created\n- Docker deployment guide\n- Kubernetes manifests\n- Systemd service file\n- Security hardening checklist\n- Monitoring setup guide\n- Backup procedures\n- Troubleshooting section\n- Scaling recommendations\n- Links from README.md\n\n---","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-16T01:40:06.465354-07:00","updated_at":"2025-10-16T01:40:06.465354-07:00","dependencies":[{"issue_id":"bd-302","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:06.475326-07:00","created_by":"stevey"}]} +{"id":"bd-303","title":"Update README.md with git-sync overview","description":"Update main README.md to include overview of git-sync feature and link to detailed documentation.","design":"Add new section: \"Multi-Device Sync\"\n\nContent:\n- Brief overview of git-based sync\n- Link to SYNC.md for details\n- Link to GATEWAY.md for gateway mode\n- Quick start examples\n- Configuration options\n\nKeep brief - detailed docs in separate files.","acceptance_criteria":"- README.md updated with sync section\n- Links to SYNC.md and GATEWAY.md\n- Quick start examples\n- Configuration overview\n- Maintains existing structure\n- All links working\n\n---","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-16T01:40:06.534879-07:00","updated_at":"2025-10-16T01:40:06.534879-07:00","dependencies":[{"issue_id":"bd-303","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:06.540695-07:00","created_by":"stevey"}]} +{"id":"bd-304","title":"Create SYNC.md comprehensive guide","description":"Create detailed SYNC.md guide covering all aspects of git-based synchronization.","design":"Sections:\n1. Introduction\n2. Quick Start\n3. Manual Git Workflow\n4. bd sync Command\n5. bd daemon Background Sync\n6. Git Hooks\n7. Conflict Resolution\n8. Best Practices\n9. Troubleshooting\n10. FAQ\n\nInclude examples, code snippets, and diagrams.","acceptance_criteria":"- SYNC.md created with all sections\n- Quick start guide for new users\n- Detailed workflow examples\n- Conflict resolution guide\n- Best practices section\n- Troubleshooting with solutions\n- FAQ with common questions\n- Code examples working\n- Links from README.md\n\n---","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-16T01:40:06.562753-07:00","updated_at":"2025-10-16T01:40:06.562753-07:00","dependencies":[{"issue_id":"bd-304","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:06.59025-07:00","created_by":"stevey"}]} +{"id":"bd-305","title":"Create API.md for gateway API documentation","description":"Create comprehensive API.md documenting the gateway REST API and WebSocket protocol.","design":"Sections:\n1. Introduction\n2. Authentication\n3. REST Endpoints\n4. WebSocket Protocol\n5. Error Handling\n6. Rate Limits\n7. Examples\n\nFor each endpoint:\n- URL and method\n- Request parameters\n- Request body schema\n- Response schema\n- Error responses\n- Code example","acceptance_criteria":"- API.md created with all sections\n- All endpoints documented\n- Request/response schemas\n- WebSocket protocol docs\n- Error codes and handling\n- Rate limit documentation\n- Examples in multiple languages\n- Links from README.md\n\n---","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-16T01:40:06.631897-07:00","updated_at":"2025-10-16T01:40:06.631897-07:00","dependencies":[{"issue_id":"bd-305","depends_on_id":"bd-251","type":"blocks","created_at":"2025-10-16T01:40:06.672163-07:00","created_by":"stevey"}]} +{"id":"bd-306","title":"Close GH-11 (Docker support) or update with sync approach","description":"Resolve GitHub issue 11 about Docker support - either close as completed via gateway or update with new sync approach.","design":"Review GH-11 requirements:\n- User wants to use beads across multiple dev machines\n- Docker hosting was proposed solution\n\nNew approach:\n- Phase 1: Pure git-based sync (no Docker needed)\n- Phase 2: Optional Docker gateway for convenience\n- Addresses use case without mandating server\n\nUpdate GH-11 with:\n- Link to DESIGN-GIT-SYNC.md\n- Explain git-based approach\n- Note optional Docker gateway\n- Ask for feedback\n\nClose issue when sync features implemented.","acceptance_criteria":"- GH-11 reviewed and understood\n- Comment added explaining sync approach\n- Link to design document\n- User feedback requested\n- Issue closed when Phase 1-2 complete\n- Documentation cross-referenced","status":"open","priority":2,"issue_type":"task","created_at":"2025-10-16T01:40:06.674765-07:00","updated_at":"2025-10-16T01:40:06.674765-07:00"} {"id":"bd-31","title":"Test issue for design field","description":"Testing the new update flags","design":"## Design Plan\\n- Add flags to update command\\n- Test thoroughly\\n- Document changes","acceptance_criteria":"- All three fields (design, notes, acceptance-criteria) can be updated\\n- Changes persist in database\\n- bd show displays the fields correctly","notes":"Implementation complete. All tests passing.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-10-14T14:43:06.91361-07:00","updated_at":"2025-10-16T01:00:55.700623-07:00","closed_at":"2025-10-15T03:01:29.573031-07:00"} {"id":"bd-32","title":"bd should auto-detect .beads/*.db in current directory","description":"When bd is run without --db flag, it defaults to beads' own database instead of looking for a .beads/*.db file in the current working directory. This causes confusion when working on other projects that use beads for issue tracking (like vc).\n\nExpected behavior: bd should search for .beads/*.db in cwd and use that if found, before falling back to default beads database.\n\nExample: Running 'bd ready' in /Users/stevey/src/vc/vc/ should automatically find and use .beads/vc.db without requiring --db flag every time.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-10-14T14:43:06.914075-07:00","updated_at":"2025-10-16T01:00:55.701014-07:00","closed_at":"2025-10-15T03:01:29.573414-07:00"} {"id":"bd-33","title":"Document or automate JSONL sync workflow for git collaboration","description":"When using beads across multiple machines/environments via git, there's a workflow gap:\n\n1. Machine A: Create issues → stored in .beads/project.db\n2. Machine A: bd export -o .beads/issues.jsonl\n3. Machine A: git add .beads/issues.jsonl \u0026\u0026 git commit \u0026\u0026 git push\n4. Machine B: git pull\n5. Machine B: ??? issues.jsonl exists but project.db is empty/stale\n\nThe missing step is: bd import --db .beads/project.db -i .beads/issues.jsonl\n\nThis needs to be either:\na) Documented clearly in workflow docs\nb) Automated (e.g., git hook, or bd auto-imports if jsonl is newer than db)\nc) Both\n\nReal-world impact: User had Claude Code on GCP VM create vc issues from BOOTSTRAP.md. They were exported to issues.jsonl and committed. But on local machine, vc.db was empty until manual import was run.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-10-14T14:43:06.914655-07:00","updated_at":"2025-10-16T01:00:55.701475-07:00","closed_at":"2025-10-15T03:01:29.573791-07:00"}