Finalize structured diagnostic aggregation
This commit is contained in:
@@ -98,8 +98,8 @@ func TestProductionCombatPipelineRetriesMergesNormalizesAndWritesJSON(t *testing
|
||||
}
|
||||
}
|
||||
}
|
||||
if !hasCombatWarning(output.Warnings, combatnormalize.ReasonCodeActorCanonicalized) {
|
||||
t.Fatalf("warnings = %#v, want registry normalization warning", output.Warnings)
|
||||
if !hasCombatWarning(output.Diagnostics, combatnormalize.ReasonCodeActorCanonicalized) {
|
||||
t.Fatalf("diagnostics = %#v, want registry normalization advisory", output.Diagnostics)
|
||||
}
|
||||
if len(output.Manifest.References) != 3 {
|
||||
t.Fatalf("manifest references = %#v, want scene eligibility plus extract and normalize NPC provenance", output.Manifest.References)
|
||||
@@ -217,8 +217,8 @@ func TestCombatPipelinePublishesUnavailableSceneWarningForMismatchedReference(t
|
||||
if err != nil {
|
||||
t.Fatalf("Run() error = %v", err)
|
||||
}
|
||||
if len(client.requests) != 0 || len(output.Rejected) != 0 || !hasCombatWarning(output.Warnings, "scene_classification_unavailable") {
|
||||
t.Fatalf("requests/rejected/warnings = %#v / %#v / %#v, want accepted unavailable-scene skip without a combat request", client.requests, output.Rejected, output.Warnings)
|
||||
if len(client.requests) != 0 || len(output.Rejected) != 0 || !hasCombatWarning(output.Diagnostics, "scene_classification_unavailable") {
|
||||
t.Fatalf("requests/rejected/diagnostics = %#v / %#v / %#v, want accepted unavailable-scene skip without a combat request", client.requests, output.Rejected, output.Diagnostics)
|
||||
}
|
||||
if len(output.NormalizeOutputs) != 1 {
|
||||
t.Fatalf("normalized outputs = %#v, want accepted empty combat lane", output.NormalizeOutputs)
|
||||
@@ -402,9 +402,9 @@ func combatTestTurnResponse(actor, turnKind string, unit int) string {
|
||||
return fmt.Sprintf(`{"combat_turns":[{"actor":%q,"turn_kind":%q,"source_refs":[{"start_unit_id":%d,"end_unit_id":%d}]}]}`, actor, turnKind, unit, unit)
|
||||
}
|
||||
|
||||
func hasCombatWarning(warnings []contracts.Warning, reason string) bool {
|
||||
for _, warning := range warnings {
|
||||
if warning.ReasonCode == reason {
|
||||
func hasCombatWarning(diagnostics contracts.DiagnosticCollection, reason string) bool {
|
||||
for _, group := range diagnostics.Groups {
|
||||
if group.ReasonCode == reason {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -325,8 +325,8 @@ func TestGroundedPipelineSkipsCombatForExactNarrativeScene(t *testing.T) {
|
||||
if combatCompletionCount(client.requestsSnapshot()) != 0 {
|
||||
t.Fatalf("combat completion requests = %#v, want none for an exact narrative scene", client.requestsSnapshot())
|
||||
}
|
||||
if len(output.Rejected) != 0 || hasCombatWarning(output.Warnings, "scene_classification_unavailable") {
|
||||
t.Fatalf("narrative output rejected/warnings = %#v / %#v, want accepted skip without unavailable warning", output.Rejected, output.Warnings)
|
||||
if len(output.Rejected) != 0 || hasCombatWarning(output.Diagnostics, "scene_classification_unavailable") {
|
||||
t.Fatalf("narrative output rejected/diagnostics = %#v / %#v, want accepted skip without unavailable advisory", output.Rejected, output.Diagnostics)
|
||||
}
|
||||
combatValue := normalizedCombatOutput(t, output)
|
||||
if combatValue.CombatTurns == nil || len(combatValue.CombatTurns) != 0 {
|
||||
|
||||
@@ -86,8 +86,8 @@ func TestRunnerProcessesSeriatimInputWithProductionDNDNPCPipeline(t *testing.T)
|
||||
}
|
||||
}
|
||||
}
|
||||
if !hasNPCWarning(output.Warnings, "duplicate_npc_collapsed") {
|
||||
t.Fatalf("warnings = %#v, want name-only consolidation warning", output.Warnings)
|
||||
if !hasNPCWarning(output.Diagnostics, "duplicate_npc_collapsed") {
|
||||
t.Fatalf("diagnostics = %#v, want name-only consolidation advisory", output.Diagnostics)
|
||||
}
|
||||
if output.Manifest.ValidationStatus != "approved" || len(output.Manifest.ArtifactLanes) != 1 {
|
||||
t.Fatalf("manifest = %#v, want approved NPC lane", output.Manifest)
|
||||
@@ -213,8 +213,8 @@ func TestProductionNPCNormalizationRetryUsesFinalSafeProposal(t *testing.T) {
|
||||
if client.requestCount(npcnormalize.PromptID) != test.wantCalls || len(output.NormalizeOutputs) != 1 {
|
||||
t.Fatalf("normalization calls = %d output = %#v, want %d accepted result", client.requestCount(npcnormalize.PromptID), output.NormalizeOutputs, test.wantCalls)
|
||||
}
|
||||
if got := hasWarningReason(output.Warnings, npcnormalize.ReasonCodeNPCSemanticReconciliationExhausted); got != test.wantExhaustion {
|
||||
t.Fatalf("warnings = %#v, exhaustion = %t, want %t", output.Warnings, got, test.wantExhaustion)
|
||||
if got := hasWarningReason(output.Diagnostics, npcnormalize.ReasonCodeNPCSemanticReconciliationExhausted); got != test.wantExhaustion {
|
||||
t.Fatalf("diagnostics = %#v, exhaustion = %t, want %t", output.Diagnostics, got, test.wantExhaustion)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -355,18 +355,18 @@ func readNPCFixture(t *testing.T) []byte {
|
||||
return raw
|
||||
}
|
||||
|
||||
func hasNPCWarning(warnings []contracts.Warning, reason string) bool {
|
||||
for _, warning := range warnings {
|
||||
if warning.ReasonCode == reason && strings.HasPrefix(warning.Scope, "npcs[") {
|
||||
func hasNPCWarning(diagnostics contracts.DiagnosticCollection, reason string) bool {
|
||||
for _, group := range diagnostics.Groups {
|
||||
if group.ReasonCode == reason && len(group.Samples) > 0 && strings.HasPrefix(group.Samples[0].Scope, "npcs[") {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func hasWarningReason(warnings []contracts.Warning, reason string) bool {
|
||||
for _, warning := range warnings {
|
||||
if warning.ReasonCode == reason {
|
||||
func hasWarningReason(diagnostics contracts.DiagnosticCollection, reason string) bool {
|
||||
for _, group := range diagnostics.Groups {
|
||||
if group.ReasonCode == reason {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user