Standardize D&D prompt asset filenames

This commit is contained in:
2026-08-05 14:37:18 +00:00
parent 257bca0dc2
commit 8ed99ceaee
29 changed files with 31 additions and 145 deletions

View File

@@ -41,7 +41,7 @@ messages:
- role: user
content_file: ./sharedassets/common-dnd-npcs.md
- role: user
content_file: ./grounding.md
content_file: ./combat-grounding.md
- role: user
content_file: ./task.md
- role: user

View File

@@ -33,7 +33,7 @@ messages:
- role: user
content_file: ./sharedassets/common-dnd-extraction-evidence.md
- role: user
content_file: ./locations.md
content_file: ./location-registry.md
- role: user
content_file: ./task.md
- role: user

View File

@@ -38,7 +38,7 @@ messages:
- role: user
content_file: ./sharedassets/common-dnd-npcs.md
- role: user
content_file: ./catalog.md
content_file: ./spell-catalog.md
- role: user
content_file: ./task.md
- role: user

View File

@@ -12,7 +12,6 @@ import (
"path/filepath"
"reflect"
"runtime"
"sort"
"strings"
"sync"
"sync/atomic"
@@ -153,42 +152,6 @@ func TestProductionCatalogCoversMaintainedConfigurations(t *testing.T) {
t.Fatalf("enemy event extract validator chain = %#v, want %#v", got, enemyEventExtractChain)
}
assetNames := productionAssetNames(t, components.assets.PromptFS)
requiredAssets := []string{
"dnd.scenes/dnd.scenes.yaml",
"dnd.scenes/instructions.md",
"dnd.scenes/sharedassets/common-dnd-references.md",
"dnd.scenes/sharedassets/common-dnd-system.md",
"dnd.scenes/sharedassets/common-dnd-transcript-full.md",
"dnd.scenes/task.md",
"dnd.spells/dnd.spells.yaml",
"dnd.spells/catalog.md",
"dnd.spells/instructions.md",
"dnd.spells/sharedassets/common-dnd-references.md",
"dnd.spells/sharedassets/common-dnd-system.md",
"dnd.spells/sharedassets/common-dnd-transcript-chunk.md",
"dnd.spells/task.md",
"dnd.combat_turns/dnd.combat_turns.yaml",
"dnd.combat_turns/instructions.md",
"dnd.combat_turns/sharedassets/common-dnd-references.md",
"dnd.combat_turns/sharedassets/common-dnd-system.md",
"dnd.combat_turns/sharedassets/common-dnd-transcript-chunk.md",
"dnd.combat_turns/task.md",
"dnd.item_events/dnd.item_events.yaml",
"dnd.item_events/instructions.md",
"dnd.item_events/sharedassets/common-dnd-extraction-evidence.md",
"dnd.item_events/sharedassets/common-dnd-identity.md",
"dnd.item_events/sharedassets/common-dnd-references.md",
"dnd.item_events/sharedassets/common-dnd-system.md",
"dnd.item_events/sharedassets/common-dnd-transcript-chunk.md",
"dnd.item_events/task.md",
"dnd.enemy_events/dnd.enemy_events.yaml",
"dnd.enemy_events/grounding.md",
"dnd.enemy_events/instructions.md",
"dnd.enemy_events/task.md",
}
assertProductionContains(t, "production prompt assets", assetNames, requiredAssets)
catalog := catalogFromRegistries(registries)
for _, test := range []struct {
stage pipeline.ModuleStage
@@ -984,28 +947,6 @@ func writeProductionContractConfig(t *testing.T, content string) string {
return path
}
func productionAssetNames(t *testing.T, getFS func() (fs.FS, error)) []string {
t.Helper()
fileSystem, err := getFS()
if err != nil {
t.Fatalf("load production prompt assets: %v", err)
}
var names []string
if err := fs.WalkDir(fileSystem, ".", func(path string, entry fs.DirEntry, err error) error {
if err != nil {
return err
}
if !entry.IsDir() {
names = append(names, path)
}
return nil
}); err != nil {
t.Fatalf("walk production prompt assets: %v", err)
}
sort.Strings(names)
return names
}
func assertProductionContains[T comparable](t *testing.T, name string, got, required []T) {
t.Helper()
available := make(map[T]struct{}, len(got))

View File

@@ -16,7 +16,7 @@ const promptAssetRoot = "assets/prompts"
var promptAssetManifest = shared.PromptAssetManifest{
ModuleDir: "dnd.scenes",
ModuleFiles: []promptfs.ModulePromptFile{
{Name: "dnd.scenes.yaml", Path: "prompts/dnd.scenes.yaml"},
{Name: "prompt.yaml", Path: "prompts/prompt.yaml"},
{Name: "task.md", Path: "prompts/task.md"},
{Name: "instructions.md", Path: "prompts/instructions.md"},
},

View File

@@ -16,7 +16,7 @@ const promptAssetRoot = "assets/prompts"
var promptAssetManifest = shared.PromptAssetManifest{
ModuleDir: "dnd.combat_turns",
ModuleFiles: []promptfs.ModulePromptFile{
{Name: "dnd.combat_turns.yaml", Path: "prompts/dnd.combat_turns.yaml"},
{Name: "prompt.yaml", Path: "prompts/prompt.yaml"},
{Name: "task.md", Path: "prompts/task.md"},
{Name: "instructions.md", Path: "prompts/instructions.md"},
},

View File

@@ -16,8 +16,8 @@ const promptAssetRoot = "assets/prompts"
var promptAssetManifest = shared.PromptAssetManifest{
ModuleDir: "dnd.enemy_events",
ModuleFiles: []promptfs.ModulePromptFile{
{Name: "dnd.enemy_events.yaml", Path: "prompts/dnd.enemy_events.yaml"},
{Name: "grounding.md", Path: "prompts/grounding.md"},
{Name: "prompt.yaml", Path: "prompts/prompt.yaml"},
{Name: "combat-grounding.md", Path: "prompts/combat-grounding.md"},
{Name: "task.md", Path: "prompts/task.md"},
{Name: "instructions.md", Path: "prompts/instructions.md"},
},

View File

@@ -16,7 +16,7 @@ const promptAssetRoot = "assets/prompts"
var promptAssetManifest = shared.PromptAssetManifest{
ModuleDir: "dnd.item_events",
ModuleFiles: []promptfs.ModulePromptFile{
{Name: "dnd.item_events.yaml", Path: "prompts/dnd.item_events.yaml"},
{Name: "prompt.yaml", Path: "prompts/prompt.yaml"},
{Name: "task.md", Path: "prompts/task.md"},
{Name: "instructions.md", Path: "prompts/instructions.md"},
},

View File

@@ -16,8 +16,8 @@ const promptAssetRoot = "assets/prompts"
var promptAssetManifest = shared.PromptAssetManifest{
ModuleDir: PromptID,
ModuleFiles: []promptfs.ModulePromptFile{
{Name: "dnd.location_occurrences.yaml", Path: "prompts/dnd.location_occurrences.yaml"},
{Name: "locations.md", Path: "prompts/locations.md"},
{Name: "prompt.yaml", Path: "prompts/prompt.yaml"},
{Name: "location-registry.md", Path: "prompts/location-registry.md"},
{Name: "task.md", Path: "prompts/task.md"},
{Name: "instructions.md", Path: "prompts/instructions.md"},
},

View File

@@ -16,7 +16,7 @@ const promptAssetRoot = "assets/prompts"
var promptAssetManifest = shared.PromptAssetManifest{
ModuleDir: PromptID,
ModuleFiles: []promptfs.ModulePromptFile{
{Name: "dnd.locations.yaml", Path: "prompts/dnd.locations.yaml"},
{Name: "prompt.yaml", Path: "prompts/prompt.yaml"},
{Name: "task.md", Path: "prompts/task.md"},
{Name: "instructions.md", Path: "prompts/instructions.md"},
},

View File

@@ -16,7 +16,7 @@ const promptAssetRoot = "assets/prompts"
var promptAssetManifest = shared.PromptAssetManifest{
ModuleDir: "dnd.npc_interactions",
ModuleFiles: []promptfs.ModulePromptFile{
{Name: "dnd.npc_interactions.yaml", Path: "prompts/dnd.npc_interactions.yaml"},
{Name: "prompt.yaml", Path: "prompts/prompt.yaml"},
{Name: "task.md", Path: "prompts/task.md"},
{Name: "instructions.md", Path: "prompts/instructions.md"},
},

View File

@@ -16,7 +16,7 @@ const promptAssetRoot = "assets/prompts"
var promptAssetManifest = shared.PromptAssetManifest{
ModuleDir: "dnd.npcs",
ModuleFiles: []promptfs.ModulePromptFile{
{Name: "dnd.npcs.yaml", Path: "prompts/dnd.npcs.yaml"},
{Name: "prompt.yaml", Path: "prompts/prompt.yaml"},
{Name: "task.md", Path: "prompts/task.md"},
{Name: "instructions.md", Path: "prompts/instructions.md"},
},

View File

@@ -16,7 +16,7 @@ const promptAssetRoot = "assets/prompts"
var promptAssetManifest = shared.PromptAssetManifest{
ModuleDir: "dnd.scene_descriptions",
ModuleFiles: []promptfs.ModulePromptFile{
{Name: "dnd.scene_descriptions.yaml", Path: "prompts/dnd.scene_descriptions.yaml"},
{Name: "prompt.yaml", Path: "prompts/prompt.yaml"},
{Name: "task.md", Path: "prompts/task.md"},
{Name: "instructions.md", Path: "prompts/instructions.md"},
},

View File

@@ -16,8 +16,8 @@ const promptAssetRoot = "assets/prompts"
var promptAssetManifest = shared.PromptAssetManifest{
ModuleDir: "dnd.spells",
ModuleFiles: []promptfs.ModulePromptFile{
{Name: "dnd.spells.yaml", Path: "prompts/dnd.spells.yaml"},
{Name: "catalog.md", Path: "prompts/catalog.md"},
{Name: "prompt.yaml", Path: "prompts/prompt.yaml"},
{Name: "spell-catalog.md", Path: "prompts/spell-catalog.md"},
{Name: "task.md", Path: "prompts/task.md"},
{Name: "instructions.md", Path: "prompts/instructions.md"},
},

View File

@@ -16,7 +16,7 @@ const promptAssetRoot = "assets/prompts"
var promptAssetManifest = shared.PromptAssetManifest{
ModuleDir: PromptID,
ModuleFiles: []promptfs.ModulePromptFile{
{Name: "dnd.locations.normalize.yaml", Path: "prompts/dnd.locations.normalize.yaml"},
{Name: "prompt.yaml", Path: "prompts/prompt.yaml"},
{Name: "task.md", Path: "prompts/task.md"},
{Name: "candidates.md", Path: "prompts/candidates.md"},
},

View File

@@ -16,7 +16,7 @@ const promptAssetRoot = "assets/prompts"
var promptAssetManifest = shared.PromptAssetManifest{
ModuleDir: PromptID,
ModuleFiles: []promptfs.ModulePromptFile{
{Name: "dnd.npcs.normalize.yaml", Path: "prompts/dnd.npcs.normalize.yaml"},
{Name: "prompt.yaml", Path: "prompts/prompt.yaml"},
{Name: "task.md", Path: "prompts/task.md"},
{Name: "candidates.md", Path: "prompts/candidates.md"},
},

View File

@@ -42,22 +42,22 @@ func TestRegisterAddsDNDFamily(t *testing.T) {
if err != nil {
t.Fatalf("PromptFS() error = %v", err)
}
if _, err := fs.ReadFile(promptFS, "dnd.npcs.normalize/dnd.npcs.normalize.yaml"); err != nil {
if _, err := fs.ReadFile(promptFS, "dnd.npcs.normalize/prompt.yaml"); err != nil {
t.Fatalf("normalization prompt asset = %v, want registered private prompt", err)
}
for _, name := range []string{
"dnd.scenes/dnd.scenes.yaml",
"dnd.spells/dnd.spells.yaml",
"dnd.npcs/dnd.npcs.yaml",
"dnd.combat_turns/dnd.combat_turns.yaml",
"dnd.enemy_events/dnd.enemy_events.yaml",
"dnd.item_events/dnd.item_events.yaml",
"dnd.npc_interactions/dnd.npc_interactions.yaml",
"dnd.scene_descriptions/dnd.scene_descriptions.yaml",
"dnd.npcs.normalize/dnd.npcs.normalize.yaml",
"dnd.locations/dnd.locations.yaml",
"dnd.locations.normalize/dnd.locations.normalize.yaml",
"dnd.location_occurrences/dnd.location_occurrences.yaml",
"dnd.scenes/prompt.yaml",
"dnd.spells/prompt.yaml",
"dnd.npcs/prompt.yaml",
"dnd.combat_turns/prompt.yaml",
"dnd.enemy_events/prompt.yaml",
"dnd.item_events/prompt.yaml",
"dnd.npc_interactions/prompt.yaml",
"dnd.scene_descriptions/prompt.yaml",
"dnd.npcs.normalize/prompt.yaml",
"dnd.locations/prompt.yaml",
"dnd.locations.normalize/prompt.yaml",
"dnd.location_occurrences/prompt.yaml",
} {
content, err := fs.ReadFile(promptFS, name)
if err != nil {
@@ -295,61 +295,6 @@ func TestRegisterAddsDNDFamily(t *testing.T) {
if got := registries.ValidatorChains.Validators(pipeline.StageMerge, interactionextract.Key); got != nil {
t.Fatalf("NPC interaction merge validator chain = %#v, want absent", got)
}
assertAssetNamesContain(t, assets.PromptFS, []string{
"dnd.scenes/dnd.scenes.yaml",
"dnd.scenes/instructions.md",
"dnd.scenes/sharedassets/common-dnd-references.md",
"dnd.scenes/sharedassets/common-dnd-system.md",
"dnd.scenes/sharedassets/common-dnd-transcript-full.md",
"dnd.scenes/task.md",
"dnd.spells/dnd.spells.yaml",
"dnd.spells/instructions.md",
"dnd.spells/sharedassets/common-dnd-references.md",
"dnd.spells/sharedassets/common-dnd-system.md",
"dnd.spells/sharedassets/common-dnd-transcript-chunk.md",
"dnd.spells/task.md",
"dnd.npcs/dnd.npcs.yaml",
"dnd.npcs/instructions.md",
"dnd.npcs/sharedassets/common-dnd-references.md",
"dnd.npcs/sharedassets/common-dnd-system.md",
"dnd.npcs/sharedassets/common-dnd-transcript-chunk.md",
"dnd.npcs/task.md",
"dnd.npcs.normalize/candidates.md",
"dnd.npcs.normalize/dnd.npcs.normalize.yaml",
"dnd.npcs.normalize/sharedassets/common-dnd-entity-reconciliation.md",
"dnd.npcs.normalize/sharedassets/common-dnd-system.md",
"dnd.npcs.normalize/sharedassets/common-dnd-transcript-windows.md",
"dnd.npcs.normalize/task.md",
"dnd.combat_turns/dnd.combat_turns.yaml",
"dnd.combat_turns/instructions.md",
"dnd.combat_turns/sharedassets/common-dnd-references.md",
"dnd.combat_turns/sharedassets/common-dnd-system.md",
"dnd.combat_turns/sharedassets/common-dnd-transcript-chunk.md",
"dnd.combat_turns/task.md",
"dnd.enemy_events/dnd.enemy_events.yaml",
"dnd.enemy_events/grounding.md",
"dnd.enemy_events/instructions.md",
"dnd.enemy_events/task.md",
"dnd.item_events/dnd.item_events.yaml",
"dnd.item_events/instructions.md",
"dnd.item_events/sharedassets/common-dnd-extraction-evidence.md",
"dnd.item_events/sharedassets/common-dnd-identity.md",
"dnd.item_events/sharedassets/common-dnd-references.md",
"dnd.item_events/sharedassets/common-dnd-system.md",
"dnd.item_events/sharedassets/common-dnd-transcript-chunk.md",
"dnd.item_events/task.md",
"dnd.npc_interactions/dnd.npc_interactions.yaml",
"dnd.npc_interactions/instructions.md",
"dnd.npc_interactions/sharedassets/common-dnd-npcs.md",
"dnd.npc_interactions/task.md",
"dnd.scene_descriptions/dnd.scene_descriptions.yaml",
"dnd.scene_descriptions/instructions.md",
"dnd.scene_descriptions/sharedassets/common-dnd-identity.md",
"dnd.scene_descriptions/sharedassets/common-dnd-references.md",
"dnd.scene_descriptions/sharedassets/common-dnd-system.md",
"dnd.scene_descriptions/sharedassets/common-dnd-transcript-chunk.md",
"dnd.scene_descriptions/task.md",
})
assertAssetNamesContain(t, assets.SchemaFS, []string{
"dnd_scenes.v1.json",
"dnd_spells_llm.v1.json",