Add Daily prompt input preflight

This commit is contained in:
2026-05-29 17:32:57 +00:00
parent cf8e1de3ff
commit e556ca5edc
12 changed files with 868 additions and 26 deletions

View File

@@ -0,0 +1,52 @@
# Prompt Input Internals
This document describes the implemented prompt input package boundary.
## Purpose
`internal/promptinput` converts a structured briefing package into the
`data_package` JSON file passed to `scriptorium` prompts.
## Inputs and Outputs
Input:
- `briefing.Package`
Output:
- `promptinput.Package` JSON with report metadata, briefing content, source
warnings, RunID, and an empty Recent Changes section.
## Boundaries
- This package owns the prompt input schema and required-field validation.
- It does not fetch weather data, compute forecast summaries, compare prior
snapshots, or invoke `scriptorium`.
## Behavior
- `promptinput.Build` copies report metadata from the briefing package.
- `promptinput.Validate` rejects missing or inconsistent required fields before
render preflight.
- `promptinput.Save` writes JSON atomically where practical.
- Recent Changes is present as an empty `items` list until structured comparison
is implemented.
## Failure Behavior
Validation errors name the missing or inconsistent field. Save failures include
the filesystem operation and path context.
## Tests
Inspect:
- `internal/promptinput/package_test.go`
- `internal/app/app_test.go`
## Invariants
- Prompt input data remains structured JSON.
- Briefing metadata and top-level report metadata must agree.
- Recent Changes is not inferred from rendered report text.

View File

@@ -0,0 +1,63 @@
# Scriptorium Adapter Internals
This document describes the implemented `scriptorium` subprocess adapter.
## Purpose
`internal/adapters/scriptorium` runs `scriptorium render` to preflight prompt
wiring without LLM generation.
## Inputs and Outputs
Input:
- prompt ID
- prompt input data package path
- configured binary, config path, profile, timeout, and extra arguments
Output:
- captured stdout
- captured stderr
- exit code
- full argv used for inspection
## Boundaries
- This adapter owns `scriptorium` CLI flag construction and subprocess
execution.
- It does not choose report types, build prompt input, fetch weather data, or
decide workflow order.
## Behavior
The render invocation shape is:
```text
scriptorium render --prompt <prompt_id> --input data_package=<path> --format json
```
Configured `--config` and `--profile` values are added when present. Arguments
are passed directly as argv, not through a shell. Stdout and stderr are captured
separately. `SaveRenderResult` writes the captured result as JSON for inspection.
## Failure Behavior
Nonzero render exits return both the captured result and an error containing
the exit code and stderr. Command execution respects context cancellation and
the configured timeout.
## Tests
Inspect:
- `internal/adapters/scriptorium/runner_test.go`
- `internal/app/app_test.go`
- `internal/cli/root_test.go`
## Invariants
- `scriptorium` details stay inside the adapter package.
- The input name for prompt packages is always `data_package`.
- Render preflight is orchestration behavior; final report generation is not
implemented in this adapter yet.