diff --git a/modules/claude-code/cmd/claude-code/replace_registered_test.go b/modules/claude-code/cmd/claude-code/replace_registered_test.go index fb25e05dd..e19299c13 100644 --- a/modules/claude-code/cmd/claude-code/replace_registered_test.go +++ b/modules/claude-code/cmd/claude-code/replace_registered_test.go @@ -252,4 +252,22 @@ func TestRegisteredSectionEdgeCases(t *testing.T) { t.Errorf("the changed registered text was swallowed by the old approval:\n%s", got) } }) + t.Run("TestARemovalOfARemovedSectionIsRefused", func(t *testing.T) { + p, _ := node(t, "g14") + register(t, p, "registered") + store, r := &memProposals{m: map[string]json.RawMessage{}}, newRouter() + in := ProposeInput{Scope: ScopeMesh, Name: name, Remove: true} + out, err := Propose(p, in, store, r, t0) + if err != nil { + t.Fatal(err) + } + id := out["proposed"].(string) + r.close(r.chose(id, OptionApprove, t0.Add(time.Hour))) + if _, _, err := Reconcile(p, store, r, nil, t0.Add(time.Hour)); err != nil { + t.Fatal(err) + } + if _, err := Propose(p, in, store, r, t0.Add(2*time.Hour)); err == nil || !strings.Contains(err.Error(), "removed already") { + t.Errorf("a removed section was removed again: %v", err) + } + }) }