diff --git a/go/provider/harness/retirement.go b/go/provider/harness/retirement.go index f9162f2..b134d98 100644 --- a/go/provider/harness/retirement.go +++ b/go/provider/harness/retirement.go @@ -541,7 +541,8 @@ func RetirementTools(h *Harness) []stdio.Tool { }}, {Name: "provisioner_delete", Description: "Delete one RETIRED consumer — its login and its data — for good. Refused for anything active or " + - "asked for. Use the controller's `cleanup delete`, which records the hand act.", + "asked for. It asks nobody: ask the operator on the operator channel first, and name that answer in why and " + + "by, which the hand-act log keeps (novox/hq ADR 0604 §8).", Input: withOne, Run: func(args map[string]any) (any, error) { consumer := argString(args, "consumer") diff --git a/go/provider/harness/retirement_test.go b/go/provider/harness/retirement_test.go index 0c59f84..c2533d0 100644 --- a/go/provider/harness/retirement_test.go +++ b/go/provider/harness/retirement_test.go @@ -482,6 +482,10 @@ func TestTheToolsAnswer(t *testing.T) { tools := map[string]func(map[string]any) (any, error){} for _, tool := range RetirementTools(w.h) { tools[tool.Name] = tool.Run + // L3: the delete names no removed controller verb, and says who must be asked first (ADR 0604 §8). + if tool.Name == "provisioner_delete" && (strings.Contains(tool.Description, "controller") || !strings.Contains(tool.Description, "operator channel")) { + t.Errorf("provisioner_delete says %q", tool.Description) + } } if len(tools) != 4 { t.Fatalf("%d tools", len(tools))