122 lines
3.5 KiB
Markdown
122 lines
3.5 KiB
Markdown
# Prompt Input Internals
|
|
|
|
This document describes YAML prompt data package construction in
|
|
`internal/promptinput`.
|
|
|
|
## Purpose
|
|
|
|
`internal/promptinput` converts report metadata, an ordered module snapshot,
|
|
Recent Changes, and source warnings into the `data_package` file passed to
|
|
Scriptorium.
|
|
|
|
The persisted data package is YAML with schema version
|
|
`weatherreporter.data_package.v2`. It is separate from the JSON module snapshot
|
|
used for inspection and comparison.
|
|
|
|
## Inputs And Outputs
|
|
|
|
Inputs:
|
|
|
|
- report metadata from app/state orchestration
|
|
- `module.Snapshot`
|
|
- optional `[]changes.Change`
|
|
|
|
Outputs:
|
|
|
|
- `promptinput.Package` with schema version, RunID, report metadata, named
|
|
module stanzas grouped for prompt presentation, Recent Changes, and source
|
|
warnings
|
|
- YAML bytes from `promptinput.MarshalYAML`
|
|
- YAML file written atomically by `promptinput.Save`
|
|
|
|
The YAML shape includes:
|
|
|
|
```yaml
|
|
schema_version: weatherreporter.data_package.v2
|
|
run_id: <run_id>
|
|
report:
|
|
id: <report_id>
|
|
prompt_id: <prompt_id>
|
|
briefing:
|
|
metadata: {}
|
|
applicable_risk_products:
|
|
alert_digest: {}
|
|
derived_summaries:
|
|
derived_daily_summary: {}
|
|
derived_daypart_summaries: {}
|
|
precip_timing: {}
|
|
outdoor_windows: {}
|
|
narrative_products:
|
|
narrative_forecast: {}
|
|
area_forecast_discussion: {}
|
|
weather_story: {}
|
|
raw_data:
|
|
current_conditions: {}
|
|
hourly_forecast: {}
|
|
recent_changes:
|
|
items: []
|
|
```
|
|
|
|
The `briefing` mapping keeps `metadata` directly under `briefing` and groups
|
|
weather module stanzas under prompt-facing categories. This grouping is a YAML
|
|
presentation concern only: module snapshots remain flat, and loaded
|
|
`promptinput.Package` values expose flat stanza names in `Briefing.Values`.
|
|
Within each category, stanza order follows the module snapshot output order.
|
|
|
|
Current categories are:
|
|
|
|
- `applicable_risk_products`: location-applicable alerts, warnings, outlooks,
|
|
discussions, and similar risk products.
|
|
- `derived_summaries`: deterministic summaries and calculated report facts.
|
|
- `narrative_products`: official narrative text products and forecast stories.
|
|
- `raw_data`: minimally transformed underlying weather data.
|
|
|
|
## Boundaries
|
|
|
|
- This package owns prompt package schema, YAML marshaling, YAML loading, and
|
|
validation.
|
|
- It does not fetch weather data, derive forecast summaries, execute modules,
|
|
find prior snapshots, compare changes, choose artifact paths, or invoke
|
|
Scriptorium.
|
|
|
|
## Config Fields Used
|
|
|
|
None directly. Config-derived values such as timezone, units, and prompt
|
|
location are already present in report metadata and module stanzas before this
|
|
package runs.
|
|
|
|
## External Adapters Used
|
|
|
|
None.
|
|
|
|
## State Or Manifest Behavior
|
|
|
|
`promptinput.Save` writes YAML atomically. Managed workspace paths are owned by
|
|
`internal/state`.
|
|
|
|
## Skip And Resume Behavior
|
|
|
|
None. Recent Changes is always present as an `items` list and may be empty.
|
|
|
|
## Failure Behavior
|
|
|
|
Validation fails before render preflight when required top-level fields are
|
|
missing or inconsistent, when the valid period is invalid, or when no module
|
|
stanzas are present. Save failures include filesystem operation and path
|
|
context.
|
|
|
|
## Tests
|
|
|
|
Inspect:
|
|
|
|
- `internal/promptinput/package_test.go`
|
|
- `internal/app/app_test.go`
|
|
|
|
## Invariants
|
|
|
|
- Scriptorium receives structured YAML through `--input data_package=<path>`.
|
|
- Module stanza order is deterministic within each prompt-facing category.
|
|
- Every non-metadata module stanza has exactly one prompt-input category.
|
|
- Recent Changes are provided by `internal/changes`; this package does not
|
|
infer changes from rendered report text.
|