2.2 KiB
Prompt Input Internals
internal/promptinput converts report metadata, an ordered module snapshot, and source warnings into the YAML data_package supplied inline to Promptkit. It owns the package schema, grouping, serialization, loading, and validation; it does not choose an output destination, collect weather, execute a provider, or retain packages after a command ends.
Package Construction
Build produces weatherreporter.data_package.v4. It copies the run ID; report ID, variant, prompt ID, generation time, timezone, local current date, and valid period; ordered briefing stanzas; and source warnings. Prompt input contains no historical comparison section.
Briefing is a flat ordered set of stanza values. Build uses each output's DataPackageValue, so curated prompt exports take precedence and rich values are used only as a fallback. Prompt exports are selected by the briefing registry, while the rich-versus-prompt contract is in module internals.
YAML Ordering And Validation
Serialization keeps metadata directly under briefing. Every other known stanza is placed in one category and emitted in category order while preserving its original module order:
| Category | Current stanzas |
|---|---|
applicable_risk_products |
alert digest, SPC convective outlooks |
derived_summaries |
deterministic summaries, precipitation timing, outdoor windows, and planning values |
narrative_products |
narrative forecast, discussions, and weather story |
raw_data |
current conditions and hourly forecast |
LoadYAML accepts this layout and reconstructs the flat order and values. It rejects misplaced, duplicate, unknown, or uncategorized stanzas. Validate requires the v4 schema version, report identity and period fields, and at least one ordered briefing stanza. MarshalYAML and LoadYAML validate their result. Save remains a reusable atomic-file helper for callers that explicitly need one; normal application execution passes marshalled YAML directly to Promptkit.
Focused tests cover construction, curated exports, category ordering, YAML round trips, invalid layout, validation, and atomic saves:
go test ./internal/promptinput