Improve scene-aware combat gating
This commit is contained in:
@@ -129,6 +129,55 @@ func TestResolverUsesGeneratedReferenceWhenPresent(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestResolverReusesRawAndSemanticallyEquivalentViews(t *testing.T) {
|
||||
baseContent := encodeList(t, sceneList(
|
||||
scene("chunk-1", "session-alpha", 1, 2, dnd.SceneKindCombat, "Original title", "Original summary."),
|
||||
))
|
||||
baseItem := referenceItem(baseContent)
|
||||
baseItem.Digest = semanticDigest(baseContent)
|
||||
resolver, err := NewResolver(contracts.ReferenceSet{Slots: map[string]contracts.ResolvedReferenceSlot{ReferenceSlot: {}}})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
first, err := resolver.Resolve(referenceSet(baseItem))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
second, err := resolver.Resolve(referenceSet(baseItem))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if second != first {
|
||||
t.Fatal("identical framework reference did not reuse its immutable view")
|
||||
}
|
||||
|
||||
equivalentContent := encodeList(t, sceneList(
|
||||
scene("chunk-1", "session-alpha", 1, 2, dnd.SceneKindCombat, "Revised title", "Revised summary."),
|
||||
))
|
||||
equivalentItem := referenceItem(equivalentContent)
|
||||
equivalentItem.Digest = semanticDigest(equivalentContent)
|
||||
equivalent, err := resolver.Resolve(referenceSet(equivalentItem))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if equivalent != first {
|
||||
t.Fatal("prose-only change did not reuse the semantic eligibility view")
|
||||
}
|
||||
|
||||
for _, digest := range []string{"", "not-a-sha256-digest"} {
|
||||
fallbackItem := referenceItem(baseContent)
|
||||
fallbackItem.Digest = digest
|
||||
fallback, resolveErr := resolver.Resolve(referenceSet(fallbackItem))
|
||||
if resolveErr != nil {
|
||||
t.Fatal(resolveErr)
|
||||
}
|
||||
if fallback != first {
|
||||
t.Fatalf("digest fallback %q did not reuse the content-addressed view", digest)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestRegistryIsImmutableAndResolverIsSafeForConcurrentReuse(t *testing.T) {
|
||||
content := encodeList(t, sceneList(scene("chunk-1", "session-alpha", 1, 2, dnd.SceneKindCombat, "Title", "Summary.")))
|
||||
references := referenceSet(referenceItem(content))
|
||||
|
||||
Reference in New Issue
Block a user