diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index e10aeae8..ce4281f2 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -13,7 +13,7 @@ {"id":"bd-0zp7","title":"Add missing hook calls in mail reply and ack","description":"The mail commands are missing hook calls:\n\n1. runMailReply (mail.go:525-672) creates a message but doesn't call hookRunner.Run(hooks.EventMessage, ...) after creating the reply in direct mode (around line 640)\n\n2. runMailAck (mail.go:432-523) closes messages but doesn't call hookRunner.Run(hooks.EventClose, ...) after closing each message (around line 487 for daemon mode, 493 for direct mode)\n\nThis means GGT hooks won't fire for replies or message acknowledgments.","status":"tombstone","priority":1,"issue_type":"bug","created_at":"2025-12-16T20:52:53.069412-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-14ie","title":"Work on beads-2vn: Add simple built-in beads viewer (GH#6...","description":"Work on beads-2vn: Add simple built-in beads viewer (GH#654). Add bd list --pretty with --watch flag, tree view with priority/status symbols. When done, submit MR (not PR) to integration branch for Refinery.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-19T22:56:47.305831-08:00","updated_at":"2025-12-19T23:28:32.429492-08:00","closed_at":"2025-12-19T23:23:13.928323-08:00","close_reason":"Implemented --pretty flag with tree view and symbols. Tests pass."} {"id":"bd-14v0","title":"Add Windows code signing for bd.exe releases","description":"## Context\n\nGo binaries (including bd.exe) are commonly flagged by antivirus software as false positives due to heuristic detection. See docs/ANTIVIRUS.md for full details.\n\n## Problem\n\nKaspersky and other AV software flag bd.exe as PDM:Trojan.Win32.Generic, causing it to be quarantined or deleted.\n\n## Solution\n\nImplement code signing for Windows releases using:\n1. An EV (Extended Validation) code certificate\n2. Integration with GoReleaser to sign Windows binaries during release\n\n## Benefits\n\n- Reduces false positive rates over time as the certificate builds reputation\n- Provides tamper verification for users\n- Improves SmartScreen trust rating on Windows\n- Professional appearance for enterprise users\n\n## Implementation Steps\n\n1. Acquire EV code signing certificate (annual cost ~$300-500)\n2. Set up signtool or osslsigncode in release pipeline\n3. Update .goreleaser.yml to sign Windows binaries\n4. Update checksums to include signed binary hashes\n5. Document signing verification in ANTIVIRUS.md\n\n## References\n\n- docs/ANTIVIRUS.md - Current documentation\n- bd-t4u1 - Original Kaspersky false positive report\n- https://github.com/golang/go/issues/16292 - Go project discussion","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-23T23:46:48.459177-08:00","updated_at":"2025-12-23T23:54:41.912141-08:00","closed_at":"2025-12-23T23:54:41.912141-08:00","close_reason":"Implemented Windows code signing infrastructure. Added signing script, GoReleaser hook, updated release workflow and documentation. Signing is gracefully degraded when certificate secrets are not configured - releases continue as unsigned. Certificate acquisition (EV cert) is still required to actually enable signing.","dependencies":[{"issue_id":"bd-14v0","depends_on_id":"bd-t4u1","type":"discovered-from","created_at":"2025-12-23T23:47:02.024159-08:00","created_by":"daemon"}]} -{"id":"bd-1dez","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\nEach formula lives in its own repo (like Go modules):\n```\ngithub.com/anthropics/mol-code-review/\n├── formula.json # The formula\n├── README.md # Documentation\n└── CHANGELOG.md # Version history\n```\n\n## ID Namespace\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","status":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T12:05:17.666574-08:00","updated_at":"2025-12-25T12:05:17.666574-08:00"} +{"id":"bd-1dez","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\nEach formula lives in its own repo (like Go modules):\n```\ngithub.com/anthropics/mol-code-review/\n├── formula.json # The formula\n├── README.md # Documentation\n└── CHANGELOG.md # Version history\n```\n\n## ID Namespace\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","notes":"Deferred - focusing on Christmas launch first","status":"deferred","priority":2,"issue_type":"epic","created_at":"2025-12-25T12:05:17.666574-08:00","updated_at":"2025-12-25T12:08:46.247499-08:00"} {"id":"bd-1dez.1","title":"bd mol export: Convert proto to formula file","description":"Export a proto (template issue subgraph) to a formula.json file.\n\n## Usage\n```bash\nbd mol export bd-proto-xyz --output mol-my-workflow.formula.json\nbd mol export mol-polecat-work \u003e polecat-work.formula.json\n```\n\n## Implementation\n1. Load proto subgraph (root + all children)\n2. Convert to formula JSON structure\n3. Extract variables from {{var}} patterns\n4. Generate step IDs from issue titles (slugify)\n5. Write to file\n\n## Output Format\n```json\n{\n \"formula\": \"mol-my-workflow\",\n \"description\": \"...\",\n \"version\": 1,\n \"variables\": [...],\n \"steps\": [...]\n}\n```\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T12:05:47.045105-08:00","updated_at":"2025-12-25T12:05:47.045105-08:00","dependencies":[{"issue_id":"bd-1dez.1","depends_on_id":"bd-1dez","type":"parent-child","created_at":"2025-12-25T12:05:47.045596-08:00","created_by":"daemon"}]} {"id":"bd-1dez.2","title":"bd mol promote: Convert distilled proto to catalog proto","description":"One-step conversion from distilled proto (bd-proto-xxx) to catalog proto (mol-xxx).\n\n## Usage\n```bash\nbd mol promote bd-proto-xyz --as my-workflow\n# Creates: .beads/formulas/mol-my-workflow.formula.json\n# Cooks it to create: mol-my-workflow proto\n# Optionally deletes: bd-proto-xyz\n```\n\n## Implementation\n1. Run export internally (proto → formula)\n2. Set formula name from --as flag\n3. Save to .beads/formulas/\n4. Run cook internally (formula → catalog proto)\n5. Optionally delete original distilled proto (--keep to preserve)\n\n## Flags\n- `--as \u003cname\u003e` - Name for the catalog proto (required)\n- `--keep` - Keep the original distilled proto\n- `--output \u003cdir\u003e` - Where to save formula (default: .beads/formulas/)\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T12:05:48.588283-08:00","updated_at":"2025-12-25T12:05:48.588283-08:00","dependencies":[{"issue_id":"bd-1dez.2","depends_on_id":"bd-1dez","type":"parent-child","created_at":"2025-12-25T12:05:48.590203-08:00","created_by":"daemon"},{"issue_id":"bd-1dez.2","depends_on_id":"bd-1dez.1","type":"blocks","created_at":"2025-12-25T12:07:06.745686-08:00","created_by":"daemon"}]} {"id":"bd-1dez.3","title":"bd mol install: Install formula from GitHub","description":"Download and cook a formula from a GitHub repository.\n\n## Usage\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 (future: via registry lookup)\nbd mol install @anthropic/mol-code-review\n```\n\n## Implementation\n1. Parse URL: extract org, repo, optional version tag\n2. Construct raw URL: `https://raw.githubusercontent.com/org/repo/[tag]/formula.json`\n3. Fetch formula.json via HTTP\n4. Validate formula structure\n5. Save to .beads/formulas/\n6. Run cook to create local proto\n7. Record in .beads/installed.json for update tracking\n\n## installed.json Format\n```json\n{\n \"mol-code-review\": {\n \"source\": \"github.com/anthropics/mol-code-review\",\n \"version\": \"v1.2.0\",\n \"installed_at\": \"2025-12-25T12:00:00Z\"\n }\n}\n```\n\n## Dependencies\n- Requires network access\n- Uses `gh` CLI or direct HTTP for auth (private repos)\n","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-25T12:05:49.757336-08:00","updated_at":"2025-12-25T12:05:49.757336-08:00","dependencies":[{"issue_id":"bd-1dez.3","depends_on_id":"bd-1dez","type":"parent-child","created_at":"2025-12-25T12:05:49.759176-08:00","created_by":"daemon"},{"issue_id":"bd-1dez.3","depends_on_id":"bd-1dez.7","type":"blocks","created_at":"2025-12-25T12:07:06.825716-08:00","created_by":"daemon"}]} @@ -114,7 +114,7 @@ {"id":"bd-7bs4.13","title":"Update local binary","description":"cp ./bd ~/.local/bin/bd","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:20.471352-08:00","updated_at":"2025-12-24T16:22:20.471352-08:00","dependencies":[{"issue_id":"bd-7bs4.13","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:20.471729-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.13","depends_on_id":"bd-7bs4.6","type":"blocks","created_at":"2025-12-24T16:22:38.18639-08:00","created_by":"daemon"}]} {"id":"bd-7bs4.14","title":"Restart daemons","description":"bd daemons killall","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:20.546515-08:00","updated_at":"2025-12-24T16:22:20.546515-08:00","dependencies":[{"issue_id":"bd-7bs4.14","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:20.546923-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.14","depends_on_id":"bd-7bs4.11","type":"blocks","created_at":"2025-12-24T16:22:38.256281-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.14","depends_on_id":"bd-7bs4.12","type":"blocks","created_at":"2025-12-24T16:22:38.326226-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.14","depends_on_id":"bd-7bs4.13","type":"blocks","created_at":"2025-12-24T16:22:38.398666-08:00","created_by":"daemon"}]} {"id":"bd-7bs4.15","title":"Upgrade beads-mcp","description":"pip3 install --upgrade beads-mcp","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:20.622802-08:00","updated_at":"2025-12-24T16:22:20.622802-08:00","dependencies":[{"issue_id":"bd-7bs4.15","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:20.623197-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.15","depends_on_id":"bd-7bs4.9","type":"blocks","created_at":"2025-12-24T16:22:38.468619-08:00","created_by":"daemon"}]} -{"id":"bd-7bs4.2","title":"Update CHANGELOG header","description":"Change [Unreleased] to [{{version}}] - {{date}} and add new empty [Unreleased] section above it.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:00.42984-08:00","updated_at":"2025-12-24T16:22:00.42984-08:00","dependencies":[{"issue_id":"bd-7bs4.2","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:00.430369-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.2","depends_on_id":"bd-7bs4.1","type":"blocks","created_at":"2025-12-24T16:22:37.417332-08:00","created_by":"daemon"}]} +{"id":"bd-7bs4.2","title":"Update CHANGELOG header","description":"Change [Unreleased] to [{{version}}] - {{date}} and add new empty [Unreleased] section above it.","status":"in_progress","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:00.42984-08:00","updated_at":"2025-12-25T12:12:59.292104-08:00","dependencies":[{"issue_id":"bd-7bs4.2","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:00.430369-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.2","depends_on_id":"bd-7bs4.1","type":"blocks","created_at":"2025-12-24T16:22:37.417332-08:00","created_by":"daemon"}]} {"id":"bd-7bs4.3","title":"Add versionChanges to info.go","description":"Add entry at TOP of versionChanges in cmd/bd/info.go","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:19.668873-08:00","updated_at":"2025-12-24T16:22:19.668873-08:00","dependencies":[{"issue_id":"bd-7bs4.3","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:19.66937-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.3","depends_on_id":"bd-7bs4.2","type":"blocks","created_at":"2025-12-24T16:22:37.487203-08:00","created_by":"daemon"}]} {"id":"bd-7bs4.4","title":"Run bump-version.sh","description":"./scripts/bump-version.sh {{version}}","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:19.751432-08:00","updated_at":"2025-12-24T16:22:19.751432-08:00","dependencies":[{"issue_id":"bd-7bs4.4","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:19.751827-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.4","depends_on_id":"bd-7bs4.3","type":"blocks","created_at":"2025-12-24T16:22:37.558681-08:00","created_by":"daemon"}]} {"id":"bd-7bs4.5","title":"Build and verify","description":"go build -o bd ./cmd/bd \u0026\u0026 ./bd version","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T16:22:19.833893-08:00","updated_at":"2025-12-24T16:22:19.833893-08:00","dependencies":[{"issue_id":"bd-7bs4.5","depends_on_id":"bd-7bs4","type":"parent-child","created_at":"2025-12-24T16:22:19.834274-08:00","created_by":"daemon"},{"issue_id":"bd-7bs4.5","depends_on_id":"bd-7bs4.4","type":"blocks","created_at":"2025-12-24T16:22:37.627922-08:00","created_by":"daemon"}]} @@ -360,7 +360,7 @@ {"id":"bd-mql4","title":"getLocalSyncBranch silently ignores YAML parse errors","description":"In autoimport.go:170-172, YAML parsing errors are silently ignored. If a user has malformed YAML in config.yaml, sync-branch will just silently be empty with no feedback.\n\nRecommendation: Add debug logging since this function is only called during auto-import, and debugging silent failures is painful.\n\nAdd: debug.Logf(\"Warning: failed to parse config.yaml: %v\", err)","status":"open","priority":4,"issue_type":"task","created_at":"2025-12-07T02:03:44.217728-08:00","updated_at":"2025-12-07T02:03:44.217728-08:00"} {"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","close_reason":"Added test coverage: TestGetDependencyTreeExternalDeps (dep tree shows external deps), TestCycleDetectionWithExternalRefs (cycle detection ignores external refs), TestCheckExternalDepNoBeadsDirectory (handles missing .beads dir), TestCheckExternalDepInvalidFormats (handles various invalid formats). All edge cases from bd-mv6h description now covered.","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":"open","priority":2,"issue_type":"epic","created_at":"2025-12-25T12:05:05.848017-08:00","updated_at":"2025-12-25T12:05:05.848017-08:00"} +{"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","close_reason":"Duplicate of bd-1dez"} {"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","assignee":"beads/echo","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","close_reason":"Improved test coverage from 27.3% to 72.0%, exceeding the 60% target. Added discovery_unit_test.go with comprehensive unit tests for walkWithDepth, checkDaemonErrorFile, CleanupStaleSockets, findBeadsDirForWorkspace, StopDaemon, KillAllDaemons, discoverDaemon, DiscoverDaemons, and discoverDaemonsLegacy."} {"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","close_reason":"Fixed in PR #641 (commit 81aa3016). The getBeadsWorktreePath function now uses git rev-parse --git-common-dir to correctly find the shared git directory, ensuring beads worktrees are created in the correct location regardless of repository structure (regular repos, worktrees, bare repos)."} {"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","metadata":"{}"}],"deleted_at":"2025-12-25T01:21:01.952723-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"bug"} diff --git a/cmd/bd/cook.go b/cmd/bd/cook.go index a61d3b56..0a5f3e6b 100644 --- a/cmd/bd/cook.go +++ b/cmd/bd/cook.go @@ -108,6 +108,24 @@ func runCook(cmd *cobra.Command, args []string) { resolved.Steps = expandedSteps } + // Apply aspects from compose.aspects (gt-8tmz.5) + if resolved.Compose != nil && len(resolved.Compose.Aspects) > 0 { + for _, aspectName := range resolved.Compose.Aspects { + aspectFormula, err := parser.LoadByName(aspectName) + if err != nil { + fmt.Fprintf(os.Stderr, "Error loading aspect %q: %v\n", aspectName, err) + os.Exit(1) + } + if aspectFormula.Type != formula.TypeAspect { + fmt.Fprintf(os.Stderr, "Error: %q is not an aspect formula (type=%s)\n", aspectName, aspectFormula.Type) + os.Exit(1) + } + if len(aspectFormula.Advice) > 0 { + resolved.Steps = formula.ApplyAdvice(resolved.Steps, aspectFormula.Advice) + } + } + } + // Apply prefix to proto ID if specified (bd-47qx) protoID := resolved.Formula if prefix != "" { diff --git a/internal/formula/types.go b/internal/formula/types.go index b5514c6a..343f8d74 100644 --- a/internal/formula/types.go +++ b/internal/formula/types.go @@ -210,6 +210,12 @@ type ComposeRules struct { // Map applies an expansion template to all steps matching a pattern. // Each matching step is replaced by the expanded template steps. Map []*MapRule `json:"map,omitempty"` + + // Aspects lists aspect formula names to apply to this formula. + // Aspects are applied after expansions, adding before/after/around + // steps to matching targets based on the aspect's advice rules. + // Example: ["security-audit", "logging"] + Aspects []string `json:"aspects,omitempty"` } // ExpandRule applies an expansion template to a single target step.