diff --git a/docs/internal/report-registry.md b/docs/internal/report-registry.md index 8b651ed..0a5579f 100644 --- a/docs/internal/report-registry.md +++ b/docs/internal/report-registry.md @@ -16,6 +16,7 @@ Each report definition declares: - report ID and display name - Scriptorium prompt ID +- generation mode - valid-period resolver - comparison strategy - managed artifact group @@ -25,6 +26,10 @@ Each report definition declares: - morning or evening batch membership - default ordered module composition +Current report definitions use the `scriptorium_markdown` generation mode. +Template and structured-text schema identifiers are empty for these Markdown +reports. + ## Reports | Report | ID | Prompt | Artifact group | Batch copy | Prior compatibility | diff --git a/internal/report/daily_report.go b/internal/report/daily_report.go index 94b18b6..a2cc06a 100644 --- a/internal/report/daily_report.go +++ b/internal/report/daily_report.go @@ -10,6 +10,7 @@ func dailyTodayDefinition() Definition { ID: DailyToday, Name: "Daily Report", PromptID: "weather.daily_report", + GenerationMode: GenerationModeScriptoriumMarkdown, ComparisonStrategy: CompareSameValidDate, ArtifactGroup: "daily", BatchOutputName: "daily.md", @@ -26,6 +27,7 @@ func dailyTomorrowDefinition() Definition { ID: DailyTomorrow, Name: "Tomorrow Planning Brief", PromptID: "weather.daily_report", + GenerationMode: GenerationModeScriptoriumMarkdown, ComparisonStrategy: CompareSameValidDate, ArtifactGroup: "daily", BatchOutputName: "tomorrow.md", diff --git a/internal/report/definition.go b/internal/report/definition.go index 42278cf..bcb7e35 100644 --- a/internal/report/definition.go +++ b/internal/report/definition.go @@ -29,6 +29,13 @@ const ( CompareRollingWindow ComparisonStrategy = "rolling_window" ) +type GenerationMode string + +const ( + GenerationModeScriptoriumMarkdown GenerationMode = "scriptorium_markdown" + GenerationModeGeneratedTextTemplate GenerationMode = "generated_text_template" +) + type Batch string const ( @@ -37,18 +44,21 @@ const ( ) type Definition struct { - ID ID - Name string - PromptID string - ComparisonStrategy ComparisonStrategy - ArtifactGroup string - BatchOutputName string - Generated bool - CompatiblePriorIDs []ID - Modules []module.ConfigItem - Morning bool - Evening bool - resolve func(ResolveRequest) (timeutil.Period, error) + ID ID + Name string + PromptID string + GenerationMode GenerationMode + TemplateID string + GeneratedTextSchemaID string + ComparisonStrategy ComparisonStrategy + ArtifactGroup string + BatchOutputName string + Generated bool + CompatiblePriorIDs []ID + Modules []module.ConfigItem + Morning bool + Evening bool + resolve func(ResolveRequest) (timeutil.Period, error) } func (d Definition) ResolvePeriod(req ResolveRequest) (timeutil.Period, error) { diff --git a/internal/report/hourly_report.go b/internal/report/hourly_report.go index 8944fcc..0f36193 100644 --- a/internal/report/hourly_report.go +++ b/internal/report/hourly_report.go @@ -14,6 +14,7 @@ func hourlyDefinition() Definition { ID: Hourly, Name: "Hourly Report", PromptID: "weather.hourly_report", + GenerationMode: GenerationModeScriptoriumMarkdown, ComparisonStrategy: CompareRollingWindow, ArtifactGroup: "hourly", BatchOutputName: "hourly.md", diff --git a/internal/report/period_test.go b/internal/report/period_test.go index 5c98fa6..b0e8bfc 100644 --- a/internal/report/period_test.go +++ b/internal/report/period_test.go @@ -245,12 +245,32 @@ func TestRegistryDefinitionsHavePromptIDsAndComparisonStrategies(t *testing.T) { if definition.PromptID == "" { t.Fatalf("%s PromptID is empty", definition.ID) } + if definition.Generated && definition.GenerationMode == "" { + t.Fatalf("%s GenerationMode is empty", definition.ID) + } if definition.ComparisonStrategy == "" { t.Fatalf("%s ComparisonStrategy is empty", definition.ID) } } } +func TestRegistryDefinitionsDeclareGenerationMetadata(t *testing.T) { + for _, definition := range DefaultRegistry().All() { + if !definition.Generated { + continue + } + if definition.GenerationMode != GenerationModeScriptoriumMarkdown { + t.Fatalf("%s GenerationMode = %q, want %q", definition.ID, definition.GenerationMode, GenerationModeScriptoriumMarkdown) + } + if definition.TemplateID != "" { + t.Fatalf("%s TemplateID = %q, want empty for Markdown report", definition.ID, definition.TemplateID) + } + if definition.GeneratedTextSchemaID != "" { + t.Fatalf("%s GeneratedTextSchemaID = %q, want empty for Markdown report", definition.ID, definition.GeneratedTextSchemaID) + } + } +} + func TestRegistryDefinitionsDeclarePathAndCompatibilityPolicy(t *testing.T) { tests := []struct { id ID diff --git a/internal/report/storm_report.go b/internal/report/storm_report.go index 68c29ca..b53496d 100644 --- a/internal/report/storm_report.go +++ b/internal/report/storm_report.go @@ -13,6 +13,7 @@ func stormDefinition() Definition { ID: Storm, Name: "Storm Report", PromptID: "weather.storm_report", + GenerationMode: GenerationModeScriptoriumMarkdown, ComparisonStrategy: CompareExplicitWindow, ArtifactGroup: "storm", BatchOutputName: "storm.md", diff --git a/internal/report/three_day_report.go b/internal/report/three_day_report.go index 7759023..21b21f7 100644 --- a/internal/report/three_day_report.go +++ b/internal/report/three_day_report.go @@ -12,6 +12,7 @@ func threeDayDefinition() Definition { ID: ThreeDay, Name: "3-Day Outlook", PromptID: "weather.three_day_outlook", + GenerationMode: GenerationModeScriptoriumMarkdown, ComparisonStrategy: CompareSameValidDate, ArtifactGroup: "three-day", BatchOutputName: "three-day.md", diff --git a/internal/report/weekend_report.go b/internal/report/weekend_report.go index b63a508..84c4bcb 100644 --- a/internal/report/weekend_report.go +++ b/internal/report/weekend_report.go @@ -13,6 +13,7 @@ func weekendDefinition() Definition { ID: Weekend, Name: "Weekend Outlook", PromptID: "weather.weekend_outlook", + GenerationMode: GenerationModeScriptoriumMarkdown, ComparisonStrategy: CompareWeekendWindow, ArtifactGroup: "weekend", BatchOutputName: "weekend.md",