From d8fb73f8f9d49642a403cfd0daf383124f422058 Mon Sep 17 00:00:00 2001 From: beads/crew/emma Date: Wed, 7 Jan 2026 01:18:12 -0800 Subject: [PATCH] bd daemon sync: 2026-01-07 01:18:12 --- .beads/issues.jsonl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index fe5c6aea..b81057a6 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -40,6 +40,7 @@ {"id":"bd-1dez.7","title":"Formula versioning: Version field and git tag integration","description":"Add versioning support to formulas for tracking updates.\n\n## Formula Version Field\n```json\n{\n \"formula\": \"mol-code-review\",\n \"version\": \"1.2.0\",\n \"min_bd_version\": \"0.25.0\",\n ...\n}\n```\n\n## Version Semantics\n- Use semver: MAJOR.MINOR.PATCH\n- MAJOR: Breaking changes to step structure\n- MINOR: New optional steps or variables\n- PATCH: Documentation, bug fixes\n\n## Git Tag Integration\n- `bd mol install repo@v1.2.0` fetches that tag\n- `bd mol install repo` fetches latest tag (or main if no tags)\n- `bd mol publish --tag v1.2.0` creates tag\n\n## Proto Version Tracking\nLocal proto should store:\n```\nsource_repo: github.com/anthropics/mol-code-review\nsource_version: v1.2.0\ninstalled_at: 2025-12-25T12:00:00Z\n```\n\nThis enables `bd mol update` to check for newer versions.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T12:06:42.674849-08:00","updated_at":"2025-12-25T19:43:22.501926-08:00","closed_at":"2025-12-25T19:43:22.501926-08:00","dependencies":[{"issue_id":"bd-1dez.7","depends_on_id":"bd-1dez","type":"parent-child","created_at":"2025-12-25T12:06:42.67694-08:00","created_by":"daemon"}]} {"id":"bd-1dez.8","title":"Installation tracking: .beads/installed.json","description":"Track installed formulas for update checking and provenance.\n\n## File 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 \"formula_hash\": \"abc123...\"\n },\n \"mol-polecat-work\": {\n \"source\": \"local\",\n \"version\": \"1\",\n \"installed_at\": \"2025-12-24T10:00:00Z\"\n }\n}\n```\n\n## Commands That Update This\n- `bd mol install` - Adds entry\n- `bd mol update` - Updates version/timestamp\n- `bd cook` - Adds entry with source:local\n- `bd mol uninstall` - Removes entry (new command)\n\n## Usage\n```bash\nbd mol list --installed # Shows installed with source/version\nbd mol outdated # Shows formulas with available updates\n```\n\n## Sync Behavior\n- installed.json is gitignored (local state)\n- Only formulas/ directory is synced\n- Each clone tracks its own installations\n","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T12:06:43.934727-08:00","updated_at":"2025-12-25T19:38:04.14827-08:00","closed_at":"2025-12-25T19:38:04.14827-08:00","dependencies":[{"issue_id":"bd-1dez.8","depends_on_id":"bd-1dez","type":"parent-child","created_at":"2025-12-25T12:06:43.937653-08:00","created_by":"daemon"}]} {"id":"bd-1dta","title":"Session ended: gt-beads-crew-emma","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-07T01:05:24.410784-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-07T01:05:24.44352-08:00","closed_at":"2026-01-07T01:05:24.44352-08:00","close_reason":"auto-closed session event"} +{"id":"bd-1e12","title":"Add tests for gate auto-discover workflow run ID","description":"Commit ee5bc593 added auto-discovery of workflow run IDs but lacks tests.\n\nWhen a gh:run gate has a non-numeric await_id (workflow name hint), gate check\nnow auto-discovers the run ID via gh run list --workflow=X.\n\nTest cases needed:\n- discoverRunIDByWorkflowName() returns most recent run ID\n- discoverRunIDByWorkflowName() handles no runs found\n- discoverRunIDByWorkflowName() handles gh CLI errors\n- checkGHRun() with workflow hint triggers discovery\n- checkGHRun() updates gate's await_id after discovery\n- queryGitHubRunsForWorkflow() parses JSON response correctly\n\nLocation: cmd/bd/gate.go:654-766\nSuggested test file: cmd/bd/gate_test.go\n\nNote: These involve external gh CLI calls, so tests may need mocking or integration setup.","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T01:18:09.795147-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-07T01:18:09.795147-08:00"} {"id":"bd-1eak","title":"Add bd refile command to move issues between rigs","description":"Add a `bd refile \u003csource-id\u003e \u003ctarget-rig\u003e` command to move issues between rigs.\n\nBeads already has the routing infrastructure:\n- ResolveBeadsDirForID - routes reads by prefix\n- ResolveBeadsDirForRig - routes writes by rig name\n- GetRoutedStorageForID - opens cross-rig storage connections\n\nImplementation:\n1. Get source issue via routing\n2. Create new issue in target rig (existing --prefix mechanism)\n3. Close source issue with 'Refiled to \u003cnew-id\u003e'\n4. Optionally: migrate deps, link the two issues\n\nThis is pure beads - no gastown involvement needed.","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-31T12:29:18.161088-08:00","created_by":"beads/crew/grip","updated_at":"2025-12-31T12:34:23.548938-08:00","closed_at":"2025-12-31T12:34:23.548938-08:00","close_reason":"Implemented bd refile command"} {"id":"bd-1juu","title":"Merge: obsidian-mjxeci6l","description":"branch: polecat/obsidian-mjxeci6l\ntarget: main\nsource_issue: obsidian-mjxeci6l\nrig: beads\nagent_bead: bd-beads-polecat-obsidian","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2026-01-02T13:44:06.098083-08:00","created_by":"beads/polecats/obsidian","updated_at":"2026-01-02T17:14:50.490086-08:00","closed_at":"2026-01-02T17:14:50.490086-08:00","close_reason":"Orphaned MR - obsidian stopped (merged no-op), branch never pushed"} {"id":"bd-1pr6","title":"Time-dependent worktree detection tests may be flaky","status":"hooked","priority":3,"issue_type":"task","created_at":"2025-12-26T01:21:22.065353-08:00","updated_at":"2025-12-30T15:44:43.360441-08:00"} @@ -516,6 +517,7 @@ {"id":"bd-hvng","title":"Merge: bd-w193","description":"branch: polecat/nux\ntarget: main\nsource_issue: bd-w193\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-19T23:23:47.496139-08:00","updated_at":"2025-12-20T23:17:26.996479-08:00","closed_at":"2025-12-20T23:17:26.996479-08:00"} {"id":"bd-hw1g","title":"Merge: quartz-mjxey2w1","description":"branch: polecat/quartz-mjxey2w1\ntarget: main\nsource_issue: quartz-mjxey2w1\nrig: beads\nagent_bead: bd-beads-polecat-quartz","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2026-01-02T14:00:55.648449-08:00","created_by":"beads/polecats/quartz","updated_at":"2026-01-02T17:14:49.305672-08:00","closed_at":"2026-01-02T17:14:49.305672-08:00","close_reason":"Orphaned MR - quartz stopped (design doc), branch never pushed"} {"id":"bd-hw3w","title":"Update info.go versionChanges","description":"Add entry to versionChanges in cmd/bd/info.go with agent-actionable changes for {{version}}","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T22:56:01.016558-08:00","updated_at":"2025-12-20T17:59:26.262511-08:00","closed_at":"2025-12-20T01:23:50.3879-08:00","dependencies":[{"issue_id":"bd-hw3w","depends_on_id":"bd-6s61","type":"parent-child","created_at":"2025-12-19T22:56:14.941855-08:00","created_by":"daemon"},{"issue_id":"bd-hw3w","depends_on_id":"bd-czss","type":"blocks","created_at":"2025-12-19T22:56:23.219257-08:00","created_by":"daemon"}]} +{"id":"bd-hxcf","title":"Add tests for sync redirect handling in git status checks","description":"Commit a61cbde6 added redirect detection for .beads/redirect but lacks tests.\n\nWhen beadsDir is redirected to another repo (crew worktree scenario), git\ncommands now detect this and use git -C \u003ctargetRepoDir\u003e.\n\nTest cases needed:\n- gitHasBeadsChanges() with redirected beads dir runs git from target repo\n- gitHasUncommittedBeadsChanges() handles redirect correctly\n- Redirect detection works with symlinks vs redirect file\n- Non-redirected case still works normally\n\nLocation: cmd/bd/sync_git.go:93-108 and 472-485\nSuggested test file: cmd/bd/sync_git_test.go","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T01:18:10.759059-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-07T01:18:10.759059-08:00"} {"id":"bd-hy9p","title":"Add --body-file flag to bd create for reading descriptions from files","description":"## Problem\n\nCreating issues with long/complex descriptions via CLI requires shell escaping gymnastics:\n\n```bash\n# Current workaround - awkward heredoc quoting\nbd create --title=\"...\" --description=\"$(cat \u003c\u003c'EOF'\n...markdown...\nEOF\n)\"\n\n# Often fails with quote escaping errors in eval context\n# Agents resort to writing temp files then reading them\n```\n\n## Proposed Solution\n\nAdd `--body-file` and `--description-file` flags to read description from a file, matching `gh` CLI pattern.\n\n```bash\n# Natural pattern that aligns with training data\ncat \u003e /tmp/desc.md \u003c\u003c 'EOF'\n...markdown content...\nEOF\n\nbd create --title=\"...\" --body-file=/tmp/desc.md\n```\n\n## Implementation\n\n### 1. Add new flags to `bd create`\n\n```go\ncreateCmd.Flags().String(\"body-file\", \"\", \"Read description from file (use - for stdin)\")\ncreateCmd.Flags().String(\"description-file\", \"\", \"Alias for --body-file\")\n```\n\n### 2. Flag precedence\n\n- If `--body-file` or `--description-file` is provided, read from file\n- If value is `-`, read from stdin\n- Otherwise fall back to `--body` or `--description` flag\n- If neither provided, description is empty (current behavior)\n\n### 3. Error handling\n\n- File doesn't exist → clear error message\n- File not readable → clear error message\n- stdin specified but not available → clear error message\n\n## Benefits\n\n✅ **Matches training data**: `gh issue create --body-file file.txt` is a common pattern\n✅ **No shell escaping issues**: File content is read directly\n✅ **Works with any content**: Markdown, special characters, quotes, etc.\n✅ **Agent-friendly**: Agents already write complex content to temp files\n✅ **User-friendly**: Easier for humans too when pasting long descriptions\n\n## Related Commands\n\nConsider adding similar support to:\n- `bd update --body-file` (for updating descriptions)\n- `bd comment --body-file` (if/when we add comments)\n\n## Examples\n\n```bash\n# From file\nbd create --title=\"Add new feature\" --body-file=feature.md\n\n# From stdin\necho \"Quick description\" | bd create --title=\"Bug fix\" --body-file=-\n\n# With other flags\nbd create \\\n --title=\"Security issue\" \\\n --type=bug \\\n --priority=0 \\\n --body-file=security-report.md \\\n --label=security\n```\n\n## Testing\n\n- Test with normal files\n- Test with stdin (`-`)\n- Test with non-existent files (error handling)\n- Test with binary files (should handle gracefully)\n- Test with empty files (valid - empty description)\n- Test that `--description-file` and `--body-file` are equivalent aliases","status":"tombstone","priority":1,"issue_type":"feature","created_at":"2025-11-22T00:02:08.762684-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":"feature"} {"id":"bd-hzvz","title":"Update info.go versionChanges","description":"Add entry to versionChanges in cmd/bd/info.go with agent-actionable changes for 0.30.7","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T22:56:48.649359-08:00","updated_at":"2025-12-19T22:57:31.604229-08:00","closed_at":"2025-12-19T22:57:31.604229-08:00","dependencies":[{"issue_id":"bd-hzvz","depends_on_id":"bd-8pyn","type":"parent-child","created_at":"2025-12-19T22:56:48.652068-08:00","created_by":"stevey"},{"issue_id":"bd-hzvz","depends_on_id":"bd-2ep8","type":"blocks","created_at":"2025-12-19T22:56:48.652376-08:00","created_by":"stevey"}]} {"id":"bd-i0rx","title":"Merge: bd-ao0s","description":"branch: polecat/rictus\ntarget: main\nsource_issue: bd-ao0s\nrig: beads","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2025-12-20T01:13:42.716658-08:00","updated_at":"2025-12-20T23:17:26.993744-08:00","closed_at":"2025-12-20T23:17:26.993744-08:00"} @@ -753,6 +755,7 @@ {"id":"bd-ndye","title":"mergeDependencies uses union instead of 3-way merge","description":"## Critical Bug\n\nThe `mergeDependencies` function in internal/merge/merge.go performs a UNION of left and right dependencies instead of a proper 3-way merge. This causes removed dependencies to be resurrected.\n\n### Root Cause\n\n```go\n// Current code (lines 795-816):\nfunc mergeDependencies(left, right []Dependency) []Dependency {\n // Just unions left + right\n // NEVER REMOVES anything\n // Doesn't even look at base!\n}\n```\n\nAnd `mergeIssue` (line 579) doesn't pass `base`:\n```go\nresult.Dependencies = mergeDependencies(left.Dependencies, right.Dependencies)\n```\n\n### Impact\n\nIf:\n- Base has dependency D\n- Left removes D (intentional)\n- Right still has D (stale)\n\nCurrent: D is in result (resurrection!)\nCorrect: Left removed it, D should NOT be in result\n\nThis breaks Gas Town's workflow and data integrity. Closed means closed.\n\n### Fix\n\nChange `mergeDependencies` to take `base` and do proper 3-way merge:\n- If dep was in base and removed by left → exclude (left wins)\n- If dep was in base and removed by right → exclude (right wins)\n- If dep wasn't in base and added by either → include\n- If dep was in base and both still have it → include\n\nKey principle: **REMOVALS ARE AUTHORITATIVE**\n\n### Files to Change\n\n1. internal/merge/merge.go:\n - `mergeDependencies(left, right)` → `mergeDependencies(base, left, right)`\n - `mergeIssue` line 579: pass `base.Dependencies`\n\n### Related\n\nThis also explains why `ProtectLocalExportIDs` in importer is defined but never used - the protection was never actually implemented.","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-18T23:15:54.475872-08:00","updated_at":"2025-12-18T23:21:10.709571-08:00","closed_at":"2025-12-18T23:21:10.709571-08:00"} {"id":"bd-ne0h","title":"GHI #891: close_reason field dropped during merge/sync","description":"GitHub Issue #891: close_reason field dropped during merge/sync\n\nhttps://github.com/steveyegge/beads/issues/891","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-01-04T11:22:12.270387-08:00","created_by":"mayor","updated_at":"2026-01-04T15:22:07.769236-08:00","closed_at":"2026-01-04T11:28:48.394697-08:00","close_reason":"Fixed: Added CloseReason and ClosedBySession fields to merge.Issue struct with proper merge logic"} {"id":"bd-ngfl","title":"Merge: topaz-mk04tram","description":"branch: polecat/topaz-mk04tram\ntarget: main\nsource_issue: topaz-mk04tram\nrig: beads\nagent_bead: bd-beads-polecat-topaz\nretry_count: 0\nlast_conflict_sha: null\nconflict_task_id: null","status":"closed","priority":2,"issue_type":"merge-request","created_at":"2026-01-04T11:45:09.022511-08:00","created_by":"beads/polecats/topaz","updated_at":"2026-01-05T19:45:43.984821-08:00","closed_at":"2026-01-05T19:45:43.984821-08:00","close_reason":"Branch deleted, already merged"} +{"id":"bd-nib2","title":"Add tests for bd create --dry-run flag","description":"Commit 744d2a7d added --dry-run flag to bd create but lacks tests.\n\nTest cases needed:\n- Basic dry-run outputs preview without creating issue\n- Dry-run with --json outputs valid JSON (with empty ID)\n- Dry-run with --rig/--prefix shows target rig\n- Dry-run with --file returns error\n- Dry-run includes labels and deps in preview\n- Dry-run with --type=event includes event fields\n\nLocation: cmd/bd/create.go:181-254\nSuggested test file: cmd/bd/create_test.go","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-07T01:18:08.338705-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-07T01:18:08.338705-08:00"} {"id":"bd-nim5","title":"Detect/prevent child→parent dependency anti-pattern","description":"## Problem\n\nWhen filing issues with dependencies, it's easy to fall into the \"temporal trap\":\n- Thinking \"Phase 1 comes before Phase 2\"\n- Writing `bd dep add phase1 phase2`\n- But that means \"phase1 depends on phase2\" (backwards!)\n\nA specific variant: children depending on their parent epic. This is ALWAYS wrong because:\n1. Parent-child relationship already captures the dependency (parent closes when children done)\n2. Child→parent dep creates a block: child can't start because parent is \"open\"\n3. Parent can't close because children aren't done\n4. Deadlock\n\n## Solution\n\n### 1. Prevent at creation (`bd dep add`)\n\nWhen user runs `bd dep add X Y`:\n- Check if X is a child of Y (X.id starts with Y.id + \".\")\n- If so, error: \"Cannot add dependency: X is already a child of Y. Children inherit dependency on parent completion via hierarchy.\"\n\n### 2. Detect in `bd doctor`\n\nAdd a check that finds all cases where:\n- Issue A depends on Issue B\n- A.id matches pattern B.id + \".*\" (A is child of B)\n\nReport as: \"Child→parent dependency detected (anti-pattern)\"\nOffer repair: \"Remove N backwards dependencies? [y/N]\"\n\n## Implementation\n\n- `dep_add.go`: Add parent-child check before adding dependency\n- `doctor.go`: Add backwards-dep detection to health checks\n","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-24T12:51:15.788796-08:00","updated_at":"2025-12-24T13:02:44.079093-08:00","closed_at":"2025-12-24T13:02:44.079093-08:00"} {"id":"bd-njrm","title":"Work on gt-8tmz.34: Expansion var overrides not implement...","description":"Work on gt-8tmz.34: Expansion var overrides not implemented. The ExpandRule.Vars field exists in internal/formula/types.go but is ignored during expansion in internal/formula/expand.go. Implement: 1) Pass rule.Vars to expandStep in ApplyExpansions, 2) Merge vars with formula defaults (rule.Vars wins), 3) Substitute vars in template placeholders, 4) Add test in expand_test.go. When done, commit and push to main.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-25T20:01:13.586558-08:00","updated_at":"2025-12-25T20:06:11.099142-08:00","closed_at":"2025-12-25T20:06:11.099142-08:00"} {"id":"bd-nkqx","title":"bd swarm validate command","description":"Add bd swarm validate to check epic structure for swarming.\n\n## Context\nBefore running a swarm, we need to validate the epic structure:\n- Are dependencies correct (not inverted)?\n- Are there orphaned issues?\n- Is the DAG well-formed?\n\nThe Ready Front model (not phases!) means dependencies define execution order.\nCommon mistake: 'Phase 1 before Phase 2' → inverted deps.\nCorrect thinking: 'Phase 2 needs Phase 1' → bd dep add phase2 phase1\n\n## Implementation\n1. New command: bd swarm validate \u003cepic-id\u003e\n2. Walk the dependency DAG from epic children\n3. Detect issues:\n - Root issues with no dependents (orphans?)\n - Leaf issues depending on nothing (missing deps?)\n - Cycles (impossible)\n - Disconnected subgraphs\n4. Report:\n - Ready fronts (waves of parallel work)\n - Estimated worker-sessions\n - Max parallelism\n - Warnings for potential issues\n\n## Reference\n~/gt/docs/swarm-architecture.md - 'The Ready Front Model' section\n\n## Acceptance\n- bd swarm validate \u003cepic\u003e runs\n- Reports ready fronts accurately\n- Warns about structural issues\n- Returns success/failure exit code","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-28T19:11:08.788203-08:00","created_by":"mayor","updated_at":"2025-12-28T19:34:57.218009-08:00","closed_at":"2025-12-28T19:34:57.218009-08:00"}