From c1ba94192da4782b14686b7f1d431fbade2b8df6 Mon Sep 17 00:00:00 2001 From: Eric Rakestraw Date: Sun, 5 Jul 2026 16:39:41 +0000 Subject: [PATCH] Cover reference prompts for chunk and normalize usage --- internal/framework/prompt/render_test.go | 51 ++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/internal/framework/prompt/render_test.go b/internal/framework/prompt/render_test.go index a29d6d6..837982c 100644 --- a/internal/framework/prompt/render_test.go +++ b/internal/framework/prompt/render_test.go @@ -97,6 +97,57 @@ func TestRenderUserSystemWithReferencesRendersDeclaredSlots(t *testing.T) { } } +func TestRenderUserSystemWithReferencesSupportsChunkRequestData(t *testing.T) { + bundle := loadReferenceBundle(t, + []contracts.ReferenceSlot{{Name: "scene_guide"}}, + `Chunk system has guide={{ hasreference "scene_guide" }}`, + `Source={{ .SourceID }} Guide={{ reference "scene_guide" }}`, + ) + references := contracts.ReferenceSet{Slots: map[string]contracts.ResolvedReferenceSlot{ + "scene_guide": { + Slot: contracts.ReferenceSlot{Name: "scene_guide"}, + Items: []contracts.ReferenceItem{ + {SlotName: "scene_guide", Content: []byte("Keep combat scenes separate.")}, + }, + }, + }} + + system, user, _, err := bundle.RenderUserSystemWithReferences(map[string]any{"SourceID": "session-alpha"}, references) + if err != nil { + t.Fatalf("RenderUserSystemWithReferences: %v", err) + } + if !strings.Contains(system, "has guide=true") { + t.Fatalf("system = %q, want chunk reference presence", system) + } + if !strings.Contains(user, "Source=session-alpha") || !strings.Contains(user, "Keep combat scenes separate.") { + t.Fatalf("user = %q, want chunk request data and reference content", user) + } +} + +func TestRenderUserSystemWithReferencesSupportsNormalizeRequestData(t *testing.T) { + bundle := loadReferenceBundle(t, + []contracts.ReferenceSlot{{Name: "normalization_notes"}}, + `Normalize system`, + `Lane={{ .LaneID }} Notes={{ reference "normalization_notes" }}`, + ) + references := contracts.ReferenceSet{Slots: map[string]contracts.ResolvedReferenceSlot{ + "normalization_notes": { + Slot: contracts.ReferenceSlot{Name: "normalization_notes"}, + Items: []contracts.ReferenceItem{ + {SlotName: "normalization_notes", Content: []byte("Prefer canonical item names.")}, + }, + }, + }} + + _, user, _, err := bundle.RenderUserSystemWithReferences(map[string]any{"LaneID": "spells"}, references) + if err != nil { + t.Fatalf("RenderUserSystemWithReferences: %v", err) + } + if !strings.Contains(user, "Lane=spells") || !strings.Contains(user, "Prefer canonical item names.") { + t.Fatalf("user = %q, want normalize request data and reference content", user) + } +} + func TestRenderUserSystemReferenceHasReferenceRequiresContent(t *testing.T) { bundle := loadReferenceBundle(t, []contracts.ReferenceSlot{{Name: "roster"}},