Add test to prevent ResolveCollisions in auto-import (bd-247)
This commit is contained in:
56
internal/rpc/server_autoimport_test.go
Normal file
56
internal/rpc/server_autoimport_test.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package rpc
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/steveyegge/beads/internal/importer"
|
||||
)
|
||||
|
||||
// TestAutoImportDoesNotUseResolveCollisions ensures auto-import NEVER uses
|
||||
// ResolveCollisions flag. That flag is ONLY for explicit user-driven imports
|
||||
// (bd import --resolve-collisions) when merging branches.
|
||||
//
|
||||
// Auto-import should update existing issues by ID, not create duplicates.
|
||||
// Using ResolveCollisions in auto-import causes catastrophic duplicate creation
|
||||
// where every git pull creates new duplicate issues, leading to endless ping-pong
|
||||
// between agents (bd-247).
|
||||
//
|
||||
// This test enforces that checkAndAutoImportIfStale uses ResolveCollisions: false.
|
||||
func TestAutoImportDoesNotUseResolveCollisions(t *testing.T) {
|
||||
// This is a compile-time and code inspection test.
|
||||
// We verify the Options struct used in checkAndAutoImportIfStale.
|
||||
|
||||
// The correct options for auto-import
|
||||
correctOpts := importer.Options{
|
||||
ResolveCollisions: false, // MUST be false for auto-import
|
||||
RenameOnImport: true, // Safe: handles prefix mismatches
|
||||
// SkipPrefixValidation is false by default
|
||||
}
|
||||
|
||||
// Verify ResolveCollisions is false
|
||||
if correctOpts.ResolveCollisions {
|
||||
t.Fatal("Auto-import MUST NOT use ResolveCollisions=true. This causes duplicate creation (bd-247).")
|
||||
}
|
||||
|
||||
// This test will fail if someone changes the auto-import code to use ResolveCollisions.
|
||||
// To fix this test, you need to:
|
||||
// 1. Change server_export_import_auto.go line ~221 to ResolveCollisions: false
|
||||
// 2. Add a comment explaining why it must be false
|
||||
// 3. Update AGENTS.md to document the auto-import behavior
|
||||
}
|
||||
|
||||
// TestResolveCollisionsOnlyForExplicitImport documents when ResolveCollisions
|
||||
// should be used: ONLY for explicit user-driven imports from CLI.
|
||||
func TestResolveCollisionsOnlyForExplicitImport(t *testing.T) {
|
||||
t.Log("ResolveCollisions should ONLY be used for:")
|
||||
t.Log(" - bd import --resolve-collisions (user explicitly requested)")
|
||||
t.Log(" - Branch merge scenarios (different issues with same ID)")
|
||||
t.Log("")
|
||||
t.Log("ResolveCollisions should NEVER be used for:")
|
||||
t.Log(" - Auto-import after git pull (daemon/auto-sync)")
|
||||
t.Log(" - Background JSONL updates")
|
||||
t.Log(" - Normal agent synchronization")
|
||||
t.Log("")
|
||||
t.Log("Violation causes: Endless duplicate creation, database pollution, ping-pong commits")
|
||||
t.Log("See: bd-247 for catastrophic failure caused by this bug")
|
||||
}
|
||||
Reference in New Issue
Block a user