From f78186b0203cf4fab6edaace5d59e99d8e428273 Mon Sep 17 00:00:00 2001 From: Eric Rakestraw Date: Sun, 21 Jun 2026 08:38:11 -0500 Subject: [PATCH] Remove redundant alert text from the data package --- docs/internal/briefing.md | 2 ++ internal/app/app_test.go | 8 ++++++-- internal/briefing/base_modules_test.go | 6 +++--- internal/briefing/metadata_module.go | 2 -- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/docs/internal/briefing.md b/docs/internal/briefing.md index 665a3d0..f614287 100644 --- a/docs/internal/briefing.md +++ b/docs/internal/briefing.md @@ -87,6 +87,8 @@ The app layer passes effective units, timezone, and location context into the module context. `internal/facts` consumes daypart configuration before module builders run. Configured `location` values are prompt context only; Weather API `sourceLocationId` and `sourceLocation` remain source provenance. +The `metadata` module carries report context and source warnings only; alert +status and relevant alert details belong in the `alert_digest` module. `area_forecast_discussion` uses optional `sections` configuration to include a subset of discussion fields. Hourly Report defaults this module to diff --git a/internal/app/app_test.go b/internal/app/app_test.go index bcfe5cd..1e22fa8 100644 --- a/internal/app/app_test.go +++ b/internal/app/app_test.go @@ -390,8 +390,12 @@ func TestGenerateReportWritesReportAndPreflight(t *testing.T) { if savedDataPackage.Report.CurrentLocalDate != "2026-05-29" { t.Fatalf("data package currentLocalDate = %q, want 2026-05-29", savedDataPackage.Report.CurrentLocalDate) } - if _, ok := savedDataPackage.Briefing.Values["metadata"]; !ok { - t.Fatal("data package metadata stanza missing") + metadataStanza, ok := savedDataPackage.Briefing.Values["metadata"].(map[string]any) + if !ok { + t.Fatalf("data package metadata stanza = %#v, want metadata map", savedDataPackage.Briefing.Values["metadata"]) + } + if _, ok := metadataStanza["alerts"]; ok { + t.Fatalf("data package metadata contains alerts, want alert details only in alert_digest: %#v", metadataStanza) } assertNoStaleModuleIntervalKeys(t, savedDataPackage.Briefing.Values) spcOutlooks, ok := savedDataPackage.Briefing.Values["spc_convective_outlooks"].(map[string]any) diff --git a/internal/briefing/base_modules_test.go b/internal/briefing/base_modules_test.go index ddca53b..855142b 100644 --- a/internal/briefing/base_modules_test.go +++ b/internal/briefing/base_modules_test.go @@ -253,9 +253,6 @@ func TestMetadataModuleUsesPromptSafeSourceWarningSummary(t *testing.T) { if len(value.SourceWarnings) != 1 || value.SourceWarnings[0].CompletenessImpact != "source omitted" { t.Fatalf("SourceWarnings = %#v, want warning summary", value.SourceWarnings) } - if value.Alerts == nil || !value.Alerts.Checked || value.Alerts.ActiveCount != 1 || value.Alerts.RelevantCount != 1 { - t.Fatalf("Alerts = %#v, want checked alert status", value.Alerts) - } data, err := json.Marshal(output.Value) if err != nil { t.Fatalf("Marshal metadata: %v", err) @@ -264,6 +261,9 @@ func TestMetadataModuleUsesPromptSafeSourceWarningSummary(t *testing.T) { if !strings.Contains(jsonText, "source_warnings") || strings.Contains(jsonText, "endpoint") || strings.Contains(jsonText, "dataSha256") { t.Fatalf("metadata json = %s, want source warning summary without transport provenance", jsonText) } + if strings.Contains(jsonText, `"alerts"`) { + t.Fatalf("metadata json = %s, want alert details only in alert_digest", jsonText) + } } func TestCurrentConditionsModuleUsesSnakeCaseUnitFields(t *testing.T) { diff --git a/internal/briefing/metadata_module.go b/internal/briefing/metadata_module.go index f079faf..3184371 100644 --- a/internal/briefing/metadata_module.go +++ b/internal/briefing/metadata_module.go @@ -20,7 +20,6 @@ type MetadataModule struct { ValidPeriod timeutil.Period `json:"valid_period"` Location *LocationContext `json:"location,omitempty"` SourceWarnings []SourceWarningSummary `json:"source_warnings,omitempty"` - Alerts *AlertDigestModule `json:"alerts,omitempty"` } type SourceWarningSummary struct { @@ -44,7 +43,6 @@ func buildMetadataModule(ctx ModuleContext, _ any) (*module.Output, error) { ValidPeriod: metadata.ValidPeriod, Location: copyLocation(ctx.Location), SourceWarnings: sourceWarningSummaries(ctx.Collected.SourceWarnings), - Alerts: alertDigest(ctx.Collected, ctx.Derived.AlertOverlaps, ctx.Timezone), } return &module.Output{ID: module.Metadata, StanzaName: "metadata", Value: value}, nil }