29 lines
2.4 KiB
Markdown
29 lines
2.4 KiB
Markdown
# 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`. Its metadata projection comes from the prepared report identity and copies the run ID; report ID, variant, prompt ID, generation time, timezone, local current date, and valid period; ordered briefing stanzas; and prompt-safe source-warning summaries. Warning summaries include only source, code, severity, message, and completeness impact; raw transport and provenance fields such as endpoints never cross into the provider input. 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](briefing.md), while the rich-versus-prompt contract is in [module internals](module.md).
|
|
|
|
## 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:
|
|
|
|
```sh
|
|
go test ./internal/promptinput
|
|
```
|