fix(store): backfill spans in run detail

This commit is contained in:
William Valentin
2026-04-21 13:07:09 -07:00
parent 43113f6241
commit 41b7165800
2 changed files with 188 additions and 33 deletions
+55
View File
@@ -128,3 +128,58 @@ func TestFindRunIndexForSpan_MatchesOpenRun(t *testing.T) {
t.Fatalf("expected span to attach to open run-2, got index %d", idx)
}
}
func TestAddSpanToRunSpans_MergesDuplicateSpanIDs(t *testing.T) {
rs := &runSpans{}
addSpanToRunSpans(rs, SpanRow{
SpanID: "span-1",
Name: "tool.call",
Kind: "tool",
Payload: json.RawMessage(`{
"payload":{"input":{"command":"ls"}}
}`),
})
addSpanToRunSpans(rs, SpanRow{
SpanID: "span-1",
Status: "error",
Duration: func() *int64 { v := int64(42); return &v }(),
Payload: json.RawMessage(`{
"payload":{"result_preview":"failed"}
}`),
})
if len(rs.order) != 1 {
t.Fatalf("expected one span order entry, got %d", len(rs.order))
}
span := rs.byID["span-1"]
if span == nil {
t.Fatal("expected merged span to be present")
}
if span.Name != "tool.call" {
t.Fatalf("expected name to be preserved, got %q", span.Name)
}
if span.Status != "error" {
t.Fatalf("expected error status to win, got %q", span.Status)
}
if span.Duration == nil || *span.Duration != 42 {
t.Fatalf("expected duration to be merged, got %#v", span.Duration)
}
var got map[string]any
if err := json.Unmarshal(span.Payload, &got); err != nil {
t.Fatalf("unmarshal merged payload: %v", err)
}
payload, ok := got["payload"].(map[string]any)
if !ok {
t.Fatal("expected merged payload object")
}
if _, ok := payload["input"].(map[string]any); !ok {
t.Fatal("expected input to remain after merge")
}
if payload["result_preview"] != "failed" {
t.Fatalf("expected result_preview to be merged, got %#v", payload["result_preview"])
}
}