refactor: remove unused bd pin/unpin/hook commands (bd-x0zl)
Analysis found these commands are dead code: - gt never calls `bd pin` - uses `bd update --status=pinned` instead - Beads.Pin() wrapper exists but is never called - bd hook functionality duplicated by gt mol status - Code comment says "pinned field is cosmetic for bd hook visibility" Removed: - cmd/bd/pin.go - cmd/bd/unpin.go - cmd/bd/hook.go 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -138,3 +138,66 @@ func TestChildParentDependencies_FixesBadDeps(t *testing.T) {
|
||||
t.Errorf("Expected 2 dirty issues (unique issue_ids from removed deps), got %d", dirtyCount)
|
||||
}
|
||||
}
|
||||
|
||||
// TestChildParentDependencies_PreservesParentChildType verifies that legitimate
|
||||
// parent-child type dependencies are NOT removed (only blocking types are removed).
|
||||
// Regression test for GitHub issue #750.
|
||||
func TestChildParentDependencies_PreservesParentChildType(t *testing.T) {
|
||||
// Set up test database with both 'blocks' and 'parent-child' type deps
|
||||
dir := t.TempDir()
|
||||
beadsDir := filepath.Join(dir, ".beads")
|
||||
if err := os.MkdirAll(beadsDir, 0755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
dbPath := filepath.Join(beadsDir, "beads.db")
|
||||
db, err := openDB(dbPath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Create schema with both 'blocks' (anti-pattern) and 'parent-child' (legitimate) deps
|
||||
_, err = db.Exec(`
|
||||
CREATE TABLE issues (id TEXT PRIMARY KEY);
|
||||
CREATE TABLE dependencies (issue_id TEXT, depends_on_id TEXT, type TEXT);
|
||||
CREATE TABLE dirty_issues (issue_id TEXT PRIMARY KEY);
|
||||
INSERT INTO issues (id) VALUES ('bd-abc'), ('bd-abc.1'), ('bd-abc.2');
|
||||
INSERT INTO dependencies (issue_id, depends_on_id, type) VALUES
|
||||
('bd-abc.1', 'bd-abc', 'parent-child'),
|
||||
('bd-abc.2', 'bd-abc', 'parent-child'),
|
||||
('bd-abc.1', 'bd-abc', 'blocks');
|
||||
`)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
db.Close()
|
||||
|
||||
// Run fix
|
||||
err = ChildParentDependencies(dir)
|
||||
if err != nil {
|
||||
t.Fatalf("ChildParentDependencies failed: %v", err)
|
||||
}
|
||||
|
||||
// Verify only 'blocks' type was removed, 'parent-child' preserved
|
||||
db, _ = openDB(dbPath)
|
||||
defer db.Close()
|
||||
|
||||
var blocksCount int
|
||||
db.QueryRow("SELECT COUNT(*) FROM dependencies WHERE type = 'blocks'").Scan(&blocksCount)
|
||||
if blocksCount != 0 {
|
||||
t.Errorf("Expected 0 'blocks' dependencies after fix, got %d", blocksCount)
|
||||
}
|
||||
|
||||
var parentChildCount int
|
||||
db.QueryRow("SELECT COUNT(*) FROM dependencies WHERE type = 'parent-child'").Scan(&parentChildCount)
|
||||
if parentChildCount != 2 {
|
||||
t.Errorf("Expected 2 'parent-child' dependencies preserved, got %d", parentChildCount)
|
||||
}
|
||||
|
||||
// Verify only 1 dirty issue (the one with 'blocks' dep removed)
|
||||
var dirtyCount int
|
||||
db.QueryRow("SELECT COUNT(*) FROM dirty_issues").Scan(&dirtyCount)
|
||||
if dirtyCount != 1 {
|
||||
t.Errorf("Expected 1 dirty issue, got %d", dirtyCount)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user