Files
Error-Code-System/conformance/registry_test.go
T
weichenandCursor bd53e9ba79
ci / vet-and-test (push) Successful in 3s
ci / docker-checkout-hostgateway (push) Successful in 3s
Add a shared error-code catalog so failures can be traced by stable codes.
Services can resolve legacy aliases and expose the catalog over CLI and HTTP instead of ad-hoc error strings.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-29 13:43:12 +00:00

79 lines
2.5 KiB
Go

package conformance
import (
"testing"
"error-code-system/domains"
"error-code-system/errcode"
)
func TestSeedCatalog(t *testing.T) {
reg := errcode.NewRegistry()
domains.RegisterAll(reg)
seen := map[errcode.Code]struct{}{}
for _, def := range reg.List("") {
if !def.Code.Valid() {
t.Fatalf("invalid code %s", def.Code)
}
if err := def.Validate(); err != nil {
t.Fatal(err)
}
if _, ok := seen[def.Code]; ok {
t.Fatalf("duplicate %s", def.Code)
}
seen[def.Code] = struct{}{}
if def.SideEffects != errcode.SideEffectNone && def.Retry == errcode.RetryAlways {
t.Fatalf("%s: side_effects=%s forbids retry=always", def.Code, def.SideEffects)
}
for _, alias := range def.Aliases {
got, ok := reg.Lookup(alias)
if !ok || got.Code != def.Code {
t.Fatalf("alias %s -> %+v ok=%v", alias, got.Code, ok)
}
}
}
legacy := map[string]errcode.Code{
"canceled": errcode.AgentCanceled,
"deadline_exceeded": errcode.AgentDeadlineExceeded,
"budget_exceeded": errcode.AgentBudgetExceeded,
"provider_unavailable": errcode.AgentProviderUnavailable,
"provider_rejected": errcode.AgentProviderRejected,
"tool_rejected": errcode.AgentToolRejected,
"path_outside_workspace": errcode.AgentPathOutsideWorkspace,
"missing_capability": errcode.AgentMissingCapability,
"missing_deliverable": errcode.AgentMissingDeliverable,
"empty_output": errcode.AgentEmptyOutput,
"unknown_outcome": errcode.AgentUnknownOutcome,
"internal": errcode.AgentInternal,
"PROMPT_EMPTY": errcode.AgentPromptEmpty,
"UNAUTHORIZED": errcode.AgentUnauthorized,
"TIMEOUT": errcode.AgentTimeout,
"CANCELLED": errcode.AgentCanceled,
"TRANSIENT": errcode.AgentTransient,
"MISSING_TARGET": errcode.AgentMissingDeliverable,
"RUN_FAILED": errcode.AgentRunFailed,
}
for alias, want := range legacy {
got, ok := reg.Lookup(alias)
if !ok || got.Code != want {
t.Fatalf("legacy %s => %s, got %+v ok=%v", alias, want, got.Code, ok)
}
}
unknown := reg.Resolve("not-a-code")
if unknown.Code != errcode.SysUnknownCode || unknown.Retry != errcode.RetryNever || unknown.SideEffects != errcode.SideEffectUnknown {
t.Fatalf("fallback %+v", unknown)
}
if unknown.HTTP != 500 {
t.Fatalf("fallback http %d", unknown.HTTP)
}
for _, domain := range []string{"sys", "agent", "squad"} {
if len(reg.List(domain)) == 0 {
t.Fatalf("domain %s empty", domain)
}
}
}