From a7f34d8f8925f104676ab81121856ab79b3ee3ee Mon Sep 17 00:00:00 2001 From: Steve Yegge Date: Mon, 29 Dec 2025 17:54:03 -0800 Subject: [PATCH] bd sync: 2025-12-29 17:54:03 --- .beads/issues.jsonl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 8bc59fb0..473d4edc 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -66,7 +66,7 @@ {"id":"bd-2wh","title":"Test pinned for stats","status":"tombstone","priority":2,"issue_type":"task","created_at":"2025-12-18T21:47:09.334108-08:00","updated_at":"2025-12-18T21:47:25.17917-08:00","deleted_at":"2025-12-18T21:47:25.17917-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"} {"id":"bd-2wm2","title":"bd repair: Check comments and events tables for orphans","description":"bd repair currently checks dependencies and labels tables, but the schema also has comments and events tables with issue_id foreign keys that could be orphaned.\n\nAdd orphan detection and cleanup for:\n- comments table (issue_id not in issues)\n- events table (issue_id not in issues)","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-29T12:48:11.563302-08:00","created_by":"stevey","updated_at":"2025-12-29T12:57:43.745176-08:00","closed_at":"2025-12-29T12:57:43.745176-08:00","close_reason":"Implemented in repair.go: added orphan detection for comments/events tables and --json output flag"} {"id":"bd-313v","title":"rpc: Rich mutation events not emitted","description":"The activity command (activity.go) references rich mutation event types (MutationBonded, MutationSquashed, MutationBurned, MutationStatus) that include metadata like OldStatus, NewStatus, ParentID, and StepCount.\n\nHowever, the emitMutation() function in server_core.go:141 only accepts (eventType, issueID) and only populates Type, IssueID, and Timestamp. The additional metadata fields are never set.\n\nNeed to either:\n1. Add an emitRichMutation() function that accepts the additional metadata\n2. Update call sites (close, bond, squash, burn operations) to emit rich events\n\nWithout this fix, the activity feed will never show:\n- Status transitions (in_progress -\u003e closed)\n- Bonded events with step counts\n- Parent molecule relationships\n\nDiscovered during code review of bd-xo1o implementation.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-23T04:06:17.39523-08:00","updated_at":"2025-12-23T04:13:19.205249-08:00","closed_at":"2025-12-23T04:13:19.205249-08:00"} -{"id":"bd-34q1","title":"Give --all flag actual meaning in bd list","description":"The --all flag exists but is currently a no-op ('flag provided for CLI familiarity'). Once we change the default to non-closed, --all should override to show all issues including closed.\n\nThis provides backwards compatibility for scripts that depend on seeing all issues.","notes":"## Implementation Plan\n\n### Code Changes (cmd/bd/list.go)\n\n1. **Update --all flag handling** (~line 889):\n```go\n// Currently: listCmd.Flags().Bool(\"all\", false, \"Show all issues (default behavior; flag provided for CLI familiarity)\")\n// Change to:\nlistCmd.Flags().Bool(\"all\", false, \"Show all issues including closed (overrides default filter)\")\n```\n\n2. **Check for --all in Run function** (before applying default filter):\n```go\nallFlag, _ := cmd.Flags().GetBool(\"all\")\nif status == \"\" \u0026\u0026 !allFlag {\n // Apply default non-closed filter\n filter.ExcludeStatus = []types.Status{\"closed\"}\n}\n// If --all is set, no ExcludeStatus applied = show everything\n```\n\n### Testing\n- `bd list --all` shows all issues including closed\n- `bd list` shows non-closed (from bd-mypl)\n- `bd list --all --status=open` - --all is ignored when explicit status given\n\n### Documentation\n- Update --help text\n- Add to migration guide: \"Use --all for previous default behavior\"","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-29T15:25:07.522236-08:00","created_by":"stevey","updated_at":"2025-12-29T15:26:44.938088-08:00","labels":["gh:788"],"dependencies":[{"issue_id":"bd-34q1","depends_on_id":"bd-mypl","type":"blocks","created_at":"2025-12-29T15:25:20.671576-08:00","created_by":"daemon"}]} +{"id":"bd-34q1","title":"Give --all flag actual meaning in bd list","description":"The --all flag exists but is currently a no-op ('flag provided for CLI familiarity'). Once we change the default to non-closed, --all should override to show all issues including closed.\n\nThis provides backwards compatibility for scripts that depend on seeing all issues.","notes":"## Implementation Plan\n\n### Code Changes (cmd/bd/list.go)\n\n1. **Update --all flag handling** (~line 889):\n```go\n// Currently: listCmd.Flags().Bool(\"all\", false, \"Show all issues (default behavior; flag provided for CLI familiarity)\")\n// Change to:\nlistCmd.Flags().Bool(\"all\", false, \"Show all issues including closed (overrides default filter)\")\n```\n\n2. **Check for --all in Run function** (before applying default filter):\n```go\nallFlag, _ := cmd.Flags().GetBool(\"all\")\nif status == \"\" \u0026\u0026 !allFlag {\n // Apply default non-closed filter\n filter.ExcludeStatus = []types.Status{\"closed\"}\n}\n// If --all is set, no ExcludeStatus applied = show everything\n```\n\n### Testing\n- `bd list --all` shows all issues including closed\n- `bd list` shows non-closed (from bd-mypl)\n- `bd list --all --status=open` - --all is ignored when explicit status given\n\n### Documentation\n- Update --help text\n- Add to migration guide: \"Use --all for previous default behavior\"","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-29T15:25:07.522236-08:00","created_by":"stevey","updated_at":"2025-12-29T17:53:30.241263-08:00","closed_at":"2025-12-29T17:53:30.241263-08:00","close_reason":"Implemented in single commit","labels":["gh:788"],"dependencies":[{"issue_id":"bd-34q1","depends_on_id":"bd-mypl","type":"blocks","created_at":"2025-12-29T15:25:20.671576-08:00","created_by":"daemon"}]} {"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":"closed","priority":3,"issue_type":"feature","created_at":"2025-11-11T23:32:22.170083-08:00","updated_at":"2025-12-25T22:26:54.445182-08:00","closed_at":"2025-12-25T22:26:54.445182-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":"closed","priority":2,"issue_type":"task","created_at":"2025-11-04T12:32:30.727044-08:00","updated_at":"2025-12-21T21:00:05.041582-08:00","closed_at":"2025-12-21T21:00:05.041582-08:00"} {"id":"bd-396j","title":"GetBlockedIssues shows external deps as blocking even when satisfied","description":"GetBlockedIssues (ready.go:385-493) shows external:* refs in the blocked_by list but doesn't check if they're actually satisfied using CheckExternalDep.\n\nThis can be confusing - an issue shows as blocked by external:project:capability even if that capability has been shipped (closed issue with provides: label exists).\n\nOptions:\n1. Call CheckExternalDep for each external ref and filter satisfied ones from blocked_by\n2. Add a note in output indicating external deps need lazy resolution\n3. Document this is expected behavior (bd blocked shows all deps, bd ready shows resolved state)\n\nRelated: GetReadyWork correctly filters by external deps, but GetBlockedIssues doesn't.","status":"closed","priority":2,"issue_type":"bug","created_at":"2025-12-21T23:45:05.286304-08:00","updated_at":"2025-12-22T21:48:38.086451-08:00","closed_at":"2025-12-22T21:48:38.086451-08:00","dependencies":[{"issue_id":"bd-396j","depends_on_id":"bd-zmmy","type":"discovered-from","created_at":"2025-12-21T23:45:05.286971-08:00","created_by":"daemon"}]} @@ -551,7 +551,7 @@ {"id":"bd-muw","title":"Add empty tasks validation in workflow create","description":"workflow.go:321 will panic if wf.Tasks is empty. Add validation that len(wf.Tasks) \u003e 0 before accessing wf.Tasks[0].","status":"tombstone","priority":3,"issue_type":"bug","created_at":"2025-12-17T22:23:00.75707-08:00","updated_at":"2025-12-25T01:21:01.952723-08:00","deleted_at":"2025-12-25T01:21:01.952723-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"} {"id":"bd-mv6h","title":"Add test coverage for external dep edge cases","description":"During code review of bd-zmmy, identified missing test coverage:\n\n1. RemoveDependency with external ref target (will fail - see bd-a3sj)\n2. GetBlockedIssues with mix of local and external blockers\n3. GetDependencyTree with external deps\n4. AddDependency cycle detection with external refs (should be skipped?)\n5. External dep resolution with WAL mode database\n6. External dep resolution when target project has no .beads directory\n7. External dep resolution with invalid external: format variations\n\nPriority 2 because bd-a3sj is a real bug that tests would catch.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-21T23:45:37.50093-08:00","updated_at":"2025-12-22T22:32:09.515096-08:00","closed_at":"2025-12-22T22:32:09.515096-08:00","dependencies":[{"issue_id":"bd-mv6h","depends_on_id":"bd-zmmy","type":"discovered-from","created_at":"2025-12-21T23:45:37.501495-08:00","created_by":"daemon"}]} {"id":"bd-mwl7","title":"Mol Mall: Formula marketplace using GitHub as backend","description":"Create a marketplace for sharing molecule formulas using GitHub repos as the hosting backend.\n\n## Why GitHub?\n\nGitHub solves multiple problems at once:\n- **Hosting**: Raw file URLs for formula.json\n- **Versioning**: Git tags (v1.0.0, v1.2.0)\n- **Auth**: GitHub tokens for private formulas\n- **Discovery**: GitHub search, topics, stars\n- **Collaboration**: PRs for contributions, issues for bugs\n- **Organizations**: Natural scoping (@anthropic/, @gastown/)\n\n## URL Scheme\n\n```bash\n# Direct GitHub URL\nbd mol install github.com/anthropics/mol-code-review\n\n# With version tag\nbd mol install github.com/anthropics/mol-code-review@v1.2.0\n\n# Shorthand (via registry lookup)\nbd mol install @anthropic/mol-code-review\n```\n\n## Architecture\n\n### Distributed Model (like Go modules)\nEach formula lives in its own repo:\n```\ngithub.com/anthropics/mol-code-review/\n├── formula.json # The formula\n├── README.md # Documentation\n└── CHANGELOG.md # Version history\n```\n\n### Optional Registry (for discovery)\n```\ngithub.com/anthropics/mol-mall/\n└── registry.json # Index pointing to formula repos\n```\n\n## Child Issues\n\n1. `bd mol export` - Proto → Formula file\n2. `bd mol promote` - Distilled proto → Catalog proto (one step)\n3. `bd mol install` - GitHub → Local proto\n4. `bd mol update` - Check for newer versions\n5. `bd mol search` - Find formulas (GitHub API)\n6. `bd mol publish` - Push formula to GitHub repo\n7. Formula versioning - Version field + git tag integration\n8. Installation tracking - .beads/installed.json\n\n## ID Namespace Design\n\n| Entity | ID Format | Example |\n|--------|-----------|---------|\n| Formula (GitHub) | `github.com/org/repo` | `github.com/anthropics/mol-code-review` |\n| Catalog proto (local) | `mol-name` | `mol-code-review` |\n| Distilled proto | `\u003cdb\u003e-proto-xxx` | `bd-proto-a7f` |\n| Poured instance | `\u003cdb\u003e-mol-xxx` | `gt-mol-b8c` |\n| Wisp instance | `\u003cdb\u003e-wisp-xxx` | `hq-wisp-d9e` |\n","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-25T12:05:05.848017-08:00","updated_at":"2025-12-25T12:09:39.767832-08:00","closed_at":"2025-12-25T12:09:39.767832-08:00"} -{"id":"bd-mypl","title":"Default bd list to non-closed issues","description":"Change bd list default from showing all issues to showing only actionable issues (open, in_progress, blocked, deferred). This addresses GH#788 where agents get context blown out by closed issues.\n\nCurrent: bd list shows everything including closed\nProposed: bd list shows non-closed by default\n\nThis is the core fix - other enhancements depend on this change.","notes":"## Implementation Plan\n\n### Code Changes (cmd/bd/list.go)\n\n1. **Add new filter logic in Run function** (~line 393-399):\n```go\n// Default to non-closed if no status filter specified\nif status == \"\" \u0026\u0026 \\!cmd.Flags().Changed(\"all\") {\n // Show actionable issues by default (GH#788)\n filter.ExcludeStatus = []types.Status{\"closed\"}\n}\n```\n\n2. **Need to add ExcludeStatus to IssueFilter** (internal/types/types.go):\n```go\ntype IssueFilter struct {\n // ... existing fields ...\n ExcludeStatus []Status // Exclude these statuses\n}\n```\n\n3. **Update SearchIssues query** (internal/storage/sqlite/issues.go):\n```go\nif len(filter.ExcludeStatus) \u003e 0 {\n placeholders := make([]string, len(filter.ExcludeStatus))\n for i, s := range filter.ExcludeStatus {\n placeholders[i] = \"?\"\n args = append(args, string(s))\n }\n conditions = append(conditions, \n fmt.Sprintf(\"status NOT IN (%s)\", strings.Join(placeholders, \",\")))\n}\n```\n\n### Testing\n- Verify `bd list` shows open, in_progress, blocked, deferred (not closed)\n- Verify `bd list --status=closed` still works\n- Verify `bd list --all` shows everything (requires bd-34q1)\n\n### Backwards Compatibility\n- Scripts using `bd list | grep` may get fewer results\n- Document in changelog: \"bd list now defaults to non-closed issues\"","status":"open","priority":1,"issue_type":"feature","created_at":"2025-12-29T15:25:06.38667-08:00","created_by":"stevey","updated_at":"2025-12-29T15:25:57.241819-08:00","labels":["gh:788"]} +{"id":"bd-mypl","title":"Default bd list to non-closed issues","description":"Change bd list default from showing all issues to showing only actionable issues (open, in_progress, blocked, deferred). This addresses GH#788 where agents get context blown out by closed issues.\n\nCurrent: bd list shows everything including closed\nProposed: bd list shows non-closed by default\n\nThis is the core fix - other enhancements depend on this change.","notes":"## Implementation Plan\n\n### Code Changes (cmd/bd/list.go)\n\n1. **Add new filter logic in Run function** (~line 393-399):\n```go\n// Default to non-closed if no status filter specified\nif status == \"\" \u0026\u0026 \\!cmd.Flags().Changed(\"all\") {\n // Show actionable issues by default (GH#788)\n filter.ExcludeStatus = []types.Status{\"closed\"}\n}\n```\n\n2. **Need to add ExcludeStatus to IssueFilter** (internal/types/types.go):\n```go\ntype IssueFilter struct {\n // ... existing fields ...\n ExcludeStatus []Status // Exclude these statuses\n}\n```\n\n3. **Update SearchIssues query** (internal/storage/sqlite/issues.go):\n```go\nif len(filter.ExcludeStatus) \u003e 0 {\n placeholders := make([]string, len(filter.ExcludeStatus))\n for i, s := range filter.ExcludeStatus {\n placeholders[i] = \"?\"\n args = append(args, string(s))\n }\n conditions = append(conditions, \n fmt.Sprintf(\"status NOT IN (%s)\", strings.Join(placeholders, \",\")))\n}\n```\n\n### Testing\n- Verify `bd list` shows open, in_progress, blocked, deferred (not closed)\n- Verify `bd list --status=closed` still works\n- Verify `bd list --all` shows everything (requires bd-34q1)\n\n### Backwards Compatibility\n- Scripts using `bd list | grep` may get fewer results\n- Document in changelog: \"bd list now defaults to non-closed issues\"","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-29T15:25:06.38667-08:00","created_by":"stevey","updated_at":"2025-12-29T17:53:30.217188-08:00","closed_at":"2025-12-29T17:53:30.217188-08:00","close_reason":"Implemented in single commit","labels":["gh:788"]} {"id":"bd-n386","title":"Improve test coverage for internal/daemon (27.3% → 60%)","description":"The daemon package has only 27.3% test coverage. The daemon is critical for background operations and reliability.\n\nKey areas needing tests:\n- Daemon autostart logic\n- Socket handling\n- PID file management\n- Health checks\n\nCurrent coverage: 27.3%\nTarget coverage: 60%","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-13T20:43:00.895238-08:00","updated_at":"2025-12-23T22:36:08.583672-08:00","closed_at":"2025-12-23T22:36:08.583672-08:00"} {"id":"bd-n3v","title":"Error committing to sync branch: failed to create worktree","description":"\u003e bd sync --no-daemon\n→ Exporting pending changes to JSONL...\n→ Committing changes to sync branch 'beads-sync'...\nError committing to sync branch: failed to create worktree: failed to create worktree parent directory: mkdir /var/home/matt/dev/beads/fix-ci/.git: not a directory","notes":"**Problem Diagnosed**: The `bd sync` command was failing with \"mkdir /var/home/matt/dev/beads/fix-ci/.git: not a directory\" because it was being executed from the wrong directory.\n\n**Root Cause**: The command was run from `/var/home/matt/dev/beads` (where the `fix-ci` worktree exists) instead of the main repository directory `/var/home/matt/dev/beads/main`. Since `fix-ci` is a git worktree with a `.git` file (not directory), the worktree creation logic failed when trying to create `\u003ccurrent_dir\u003e/.git/beads-worktrees/\u003cbranch\u003e`.\n\n**Solution Verified**: Execute `bd sync` from the main repository directory:\n```bash\ncd main \u0026\u0026 bd sync --dry-run\n```\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-05T15:25:24.514998248-07:00","updated_at":"2025-12-24T00:25:13.040406-08:00","closed_at":"2025-12-24T00:25:13.040406-08:00"} {"id":"bd-n4td","title":"Add warning when staleness check errors","description":"## Problem\n\nWhen ensureDatabaseFresh() calls CheckStaleness() and it errors (corrupted metadata, permission issues, etc.), we silently proceed with potentially stale data.\n\n**Location:** cmd/bd/staleness.go:27-32\n\n**Scenarios:**\n- Corrupted metadata table\n- Database locked by another process \n- Permission issues reading JSONL file\n- Invalid last_import_time format in DB\n\n## Current Code\n\n```go\nisStale, err := autoimport.CheckStaleness(ctx, store, dbPath)\nif err \\!= nil {\n // If we can't determine staleness, allow operation to proceed\n // (better to show potentially stale data than block user)\n return nil\n}\n```\n\n## Fix\n\n```go\nisStale, err := autoimport.CheckStaleness(ctx, store, dbPath)\nif err \\!= nil {\n fmt.Fprintf(os.Stderr, \"Warning: Could not verify database freshness: %v\\n\", err)\n fmt.Fprintf(os.Stderr, \"Proceeding anyway. Data may be stale.\\n\\n\")\n return nil\n}\n```\n\n## Impact\nMedium - users should know when staleness check fails\n\n## Effort\nEasy - 5 minutes","status":"tombstone","priority":2,"issue_type":"bug","created_at":"2025-11-20T20:16:34.889997-05:00","updated_at":"2025-12-25T01:21:01.952723-08:00","dependencies":[{"issue_id":"bd-n4td","depends_on_id":"bd-2q6d","type":"blocks","created_at":"2025-11-20T20:18:20.154723-05:00","created_by":"stevey"}],"deleted_at":"2025-12-25T01:21:01.952723-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"} @@ -739,7 +739,7 @@ {"id":"bd-uxlb","title":"Add bd agent state command for ZFC-compliant state reporting","description":"Add command for agents to write their own state to agent beads.\n\n```bash\nbd agent state \u003cagent-id\u003e \u003cstate\u003e\n# Example: bd agent state gt-mayor running\n# States: idle | running | stuck | stopped | dead\n```\n\nImplementation:\n1. Lookup agent bead by ID (type=agent)\n2. Update agent_state field in description\n3. Update last_activity timestamp\n4. Trigger bd sync if configured\n\nAlso add:\n- bd agent heartbeat \u003cagent-id\u003e - just updates last_activity\n- bd agent show \u003cagent-id\u003e - show agent bead details\n\nThis is the ZFC-compliant way for agents to self-report state.\n\nCross-ref: gt-p2vyo in gastown","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-28T01:49:46.325964-08:00","created_by":"mayor","updated_at":"2025-12-28T01:57:05.839623-08:00","closed_at":"2025-12-28T01:57:05.839623-08:00"} {"id":"bd-uz8r","title":"Phase 2.3: TOON deletion tracking","description":"Implement deletion tracking in TOON format.\n\n## Overview\nPhase 2.2 switched storage to TOON format. Phase 2.3 adds deletion tracking in TOON format for propagating deletions across clones.\n\n## Required Work\n\n### 2.3.1 Deletion Tracking (TOON Format)\n- [ ] Implement deletions.toon file (tracking deleted issue records)\n- [ ] Add DeleteTracker struct to record deleted issue IDs and metadata\n- [ ] Update bdt delete command to record in deletions.toon\n- [ ] Design deletion record format (ID, timestamp, reason, hash)\n- [ ] Implement auto-prune of old deletion records (configurable TTL)\n\n### 2.3.2 Sync Propagation\n- [ ] Load deletions.toon during import\n- [ ] Remove deleted issues from local database when imported from remote\n- [ ] Handle edge cases (delete same issue in multiple clones)\n- [ ] Deletion ordering and conflict resolution\n\n### 2.3.3 Testing\n- [ ] Unit tests for deletion tracking\n- [ ] Integration tests for deletion propagation\n- [ ] Multi-clone deletion scenarios\n- [ ] TTL expiration tests\n\n## Success Criteria\n- deletions.toon stores deletion records in TOON format\n- Deletions propagate across clones via git sync\n- Old records auto-prune after TTL\n- All 70+ tests still passing\n- bdt delete command works seamlessly","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T14:37:23.722066816-07:00","updated_at":"2025-12-21T14:42:27.491932-08:00","closed_at":"2025-12-21T14:42:27.491932-08:00","dependencies":[{"issue_id":"bd-uz8r","depends_on_id":"bd-iic1","type":"discovered-from","created_at":"2025-12-19T14:37:23.726825771-07:00","created_by":"daemon"}]} {"id":"bd-v55y","title":"bd repair: Limit verbose output for large orphan counts","description":"When there are thousands of orphaned references, bd repair prints them all, flooding the terminal.\n\nFix: Add --verbose flag; default to summary only (e.g., 'Found 1,234 orphaned dependencies'). Only print individual items with --verbose or when count is small (\u003c20).","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-29T12:48:10.496115-08:00","created_by":"stevey","updated_at":"2025-12-29T12:59:05.123618-08:00","closed_at":"2025-12-29T12:59:05.123618-08:00","close_reason":"Fixed in commit d7a67ad6"} -{"id":"bd-v5fn","title":"Add default limit to bd list (50 issues)","description":"Add a sensible default limit of 50 issues to bd list output, matching patterns from gh cli (30) and jira-cli (50).\n\n- Default to 50 when no --limit specified\n- --limit 0 means unlimited (explicit override)\n- Protects both agents and humans from overwhelming output\n\nThis is independent of the filter change but complementary.","notes":"## Implementation Plan\n\n### Code Changes (cmd/bd/list.go)\n\n1. **Change default limit** (init function, ~line 887):\n```go\n// Currently: listCmd.Flags().IntP(\"limit\", \"n\", 0, \"Limit results\")\n// Change to:\nlistCmd.Flags().IntP(\"limit\", \"n\", 50, \"Limit results (0 for unlimited)\")\n```\n\n2. **Update help text**:\n```go\n\"Limit results (default: 50, use 0 for unlimited)\"\n```\n\n3. **Handle explicit 0** in Run function:\n```go\n// --limit 0 means unlimited\nif cmd.Flags().Changed(\"limit\") \u0026\u0026 limit == 0 {\n filter.Limit = 0 // No limit applied\n} else if limit \u003e 0 {\n filter.Limit = limit\n} else {\n filter.Limit = 50 // Default\n}\n```\n\n### Testing\n- `bd list` shows max 50 issues\n- `bd list --limit 10` shows max 10\n- `bd list --limit 0` shows unlimited\n- Verify output indicates truncation: \"Showing 50 of 499 issues (use --limit 0 for all)\"\n\n### Documentation\n- Note in help: default changed from unlimited to 50","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-29T15:25:08.299726-08:00","created_by":"stevey","updated_at":"2025-12-29T17:51:37.90408-08:00","closed_at":"2025-12-29T17:51:37.90408-08:00","close_reason":"Implemented default limit of 50 with --limit 0 for unlimited override and truncation hints","labels":["gh:788"]} +{"id":"bd-v5fn","title":"Add default limit to bd list (50 issues)","description":"Add a sensible default limit of 50 issues to bd list output, matching patterns from gh cli (30) and jira-cli (50).\n\n- Default to 50 when no --limit specified\n- --limit 0 means unlimited (explicit override)\n- Protects both agents and humans from overwhelming output\n\nThis is independent of the filter change but complementary.","notes":"## Implementation Plan\n\n### Code Changes (cmd/bd/list.go)\n\n1. **Change default limit** (init function, ~line 887):\n```go\n// Currently: listCmd.Flags().IntP(\"limit\", \"n\", 0, \"Limit results\")\n// Change to:\nlistCmd.Flags().IntP(\"limit\", \"n\", 50, \"Limit results (0 for unlimited)\")\n```\n\n2. **Update help text**:\n```go\n\"Limit results (default: 50, use 0 for unlimited)\"\n```\n\n3. **Handle explicit 0** in Run function:\n```go\n// --limit 0 means unlimited\nif cmd.Flags().Changed(\"limit\") \u0026\u0026 limit == 0 {\n filter.Limit = 0 // No limit applied\n} else if limit \u003e 0 {\n filter.Limit = limit\n} else {\n filter.Limit = 50 // Default\n}\n```\n\n### Testing\n- `bd list` shows max 50 issues\n- `bd list --limit 10` shows max 10\n- `bd list --limit 0` shows unlimited\n- Verify output indicates truncation: \"Showing 50 of 499 issues (use --limit 0 for all)\"\n\n### Documentation\n- Note in help: default changed from unlimited to 50","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-29T15:25:08.299726-08:00","created_by":"stevey","updated_at":"2025-12-29T17:53:30.23005-08:00","closed_at":"2025-12-29T17:53:30.23005-08:00","close_reason":"Implemented in single commit","labels":["gh:788"]} {"id":"bd-v8ku","title":"bd: Add town-level activity signal in PersistentPreRun","description":"Add activity signaling to beads so Gas Town daemon can detect bd usage.\n\nIn cmd/bd/main.go PersistentPreRun, add a call to write activity to\nthe Gas Town daemon directory if running inside a Gas Town workspace.\n\nThe signal file is ~/gt/daemon/activity.json (or detected town root).\n\nFormat:\n{\n \"last_command\": \"bd create ...\",\n \"actor\": \"gastown/crew/max\",\n \"timestamp\": \"2025-12-26T19:30:00Z\"\n}\n\nShould be best-effort (silent failure) to avoid breaking bd outside Gas Town.\n\nCross-rig ref: gastown gt-ws8ol (Deacon exponential backoff epic)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-26T19:25:13.537055-08:00","updated_at":"2025-12-26T19:28:44.919491-08:00","closed_at":"2025-12-26T19:28:44.919491-08:00"} {"id":"bd-vdw4","title":"Enhancement: bd swarm status accepts swarm molecule ID","description":"Currently `bd swarm status` only accepts an epic ID.\n\nWould be more intuitive to also accept the swarm molecule ID and follow the relates-to link to find the epic:\n\n```bash\nbd swarm status bd-swarm-xyz # Follow link to epic, show status\nbd swarm status bd-epic-123 # Direct epic lookup (current behavior)\n```\n\nDetect by checking if the issue has mol_type=swarm.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-28T21:38:20.692476-08:00","created_by":"beads/crew/dave","updated_at":"2025-12-28T22:05:10.112717-08:00","closed_at":"2025-12-28T22:05:10.112717-08:00","dependencies":[{"issue_id":"bd-vdw4","depends_on_id":"bd-2ubv","type":"parent-child","created_at":"2025-12-28T21:38:44.809594-08:00","created_by":"daemon"}]} {"id":"bd-vgi5","title":"Push version bump to GitHub","description":"git push origin main - triggers CI but no release yet.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-18T22:43:05.363604-08:00","updated_at":"2025-12-24T16:25:30.019895-08:00","dependencies":[{"issue_id":"bd-vgi5","depends_on_id":"bd-qqc","type":"parent-child","created_at":"2025-12-18T22:43:16.87736-08:00","created_by":"daemon"},{"issue_id":"bd-vgi5","depends_on_id":"bd-3ggb","type":"blocks","created_at":"2025-12-18T22:43:21.078208-08:00","created_by":"daemon"}],"deleted_at":"2025-12-24T16:25:30.019895-08:00","deleted_by":"daemon","delete_reason":"delete","original_type":"task"}