Validate examples and clean up roadmap
This commit is contained in:
@@ -22,6 +22,8 @@ files. Environment-variable configuration is not implemented.
|
|||||||
|
|
||||||
## Minimal Config
|
## Minimal Config
|
||||||
|
|
||||||
|
See [examples/minimal-config.yml](../examples/minimal-config.yml).
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
weather_api:
|
weather_api:
|
||||||
base_url: https://weather.api.example.com/
|
base_url: https://weather.api.example.com/
|
||||||
@@ -102,3 +104,12 @@ snapshot exists and a threshold is crossed.
|
|||||||
|
|
||||||
Configuration files should not contain secrets. The current Weather API and
|
Configuration files should not contain secrets. The current Weather API and
|
||||||
Scriptorium integration settings do not require secret fields.
|
Scriptorium integration settings do not require secret fields.
|
||||||
|
|
||||||
|
## Maintained Examples
|
||||||
|
|
||||||
|
- [examples/minimal-config.yml](../examples/minimal-config.yml): smallest
|
||||||
|
useful config for generation and fetching.
|
||||||
|
- [examples/config.yml](../examples/config.yml): production-oriented config
|
||||||
|
covering implemented fields.
|
||||||
|
|
||||||
|
Both example files are loaded by the config test suite.
|
||||||
|
|||||||
@@ -66,10 +66,8 @@ unimplemented work belongs only under `docs/roadmap/`.
|
|||||||
the canonical contributor workflow document.
|
the canonical contributor workflow document.
|
||||||
- `docs/policy/documentation.md` - keep. It is the controlling documentation
|
- `docs/policy/documentation.md` - keep. It is the controlling documentation
|
||||||
policy for this migration.
|
policy for this migration.
|
||||||
- `docs/roadmap/initial.md` - split and delete or replace. Much of it now
|
- `docs/roadmap/future.md` - keep as the future-only project roadmap. The stale
|
||||||
describes completed implementation work; extract only still-future content
|
implementation roadmap was removed after deferred work was extracted.
|
||||||
into a future-only roadmap and remove this stale initial roadmap from the
|
|
||||||
current documentation map.
|
|
||||||
- `examples/config.yml` - keep and lightly update. It is a maintained
|
- `examples/config.yml` - keep and lightly update. It is a maintained
|
||||||
production-oriented example config and should be validated against the
|
production-oriented example config and should be validated against the
|
||||||
implemented config loader.
|
implemented config loader.
|
||||||
@@ -97,8 +95,7 @@ Documents that are stale or in the wrong canonical home:
|
|||||||
|
|
||||||
- `docs/policy/development.md` contains proposed layout, MVP wording, and future
|
- `docs/policy/development.md` contains proposed layout, MVP wording, and future
|
||||||
design notes that should live in roadmap docs or be removed once implemented.
|
design notes that should live in roadmap docs or be removed once implemented.
|
||||||
- `docs/roadmap/initial.md` should not be treated as a current implementation
|
- `docs/roadmap/future.md` is the current home for deferred project work.
|
||||||
guide. It mixes completed MVP planning with deferred work.
|
|
||||||
- `README.md` links to the implementation roadmap. The README should link to
|
- `README.md` links to the implementation roadmap. The README should link to
|
||||||
current user/operator/developer docs and, if useful, a future-work roadmap
|
current user/operator/developer docs and, if useful, a future-work roadmap
|
||||||
that is clearly labeled as such.
|
that is clearly labeled as such.
|
||||||
@@ -125,7 +122,8 @@ Examples:
|
|||||||
|
|
||||||
Links likely needing verification:
|
Links likely needing verification:
|
||||||
|
|
||||||
- README links to `docs/roadmap/initial.md`.
|
- README should link only to current user/operator/developer docs unless a
|
||||||
|
clearly labeled future-work link is needed.
|
||||||
- Internal docs should link to canonical integration docs instead of repeating
|
- Internal docs should link to canonical integration docs instead of repeating
|
||||||
Scriptorium or Weather API details.
|
Scriptorium or Weather API details.
|
||||||
- Operations and troubleshooting should link to CLI and config reference rather
|
- Operations and troubleshooting should link to CLI and config reference rather
|
||||||
@@ -380,7 +378,8 @@ Links likely needing verification:
|
|||||||
- Purpose: future-only project work extracted from stale roadmap material.
|
- Purpose: future-only project work extracted from stale roadmap material.
|
||||||
- Canonical scope: deferred features such as automatic storm monitoring, if
|
- Canonical scope: deferred features such as automatic storm monitoring, if
|
||||||
still desired.
|
still desired.
|
||||||
- Source-of-truth areas: `docs/roadmap/initial.md` and current code boundaries.
|
- Source-of-truth areas: current code boundaries and deferred work already
|
||||||
|
extracted into this file.
|
||||||
- Acceptance criteria: no completed MVP tasks; no claims of current behavior;
|
- Acceptance criteria: no completed MVP tasks; no claims of current behavior;
|
||||||
each item is clearly labeled proposed, accepted, deferred, or rejected.
|
each item is clearly labeled proposed, accepted, deferred, or rejected.
|
||||||
|
|
||||||
@@ -436,9 +435,8 @@ Links likely needing verification:
|
|||||||
current project behavior.
|
current project behavior.
|
||||||
- `docs/integrations/scriptorium.md`: keep `--input data_package=<path>` as the
|
- `docs/integrations/scriptorium.md`: keep `--input data_package=<path>` as the
|
||||||
documented input contract. Do not reintroduce `--vars-file` or `promptvars`.
|
documented input contract. Do not reintroduce `--vars-file` or `promptvars`.
|
||||||
- `docs/roadmap/initial.md`: do not update it as current docs. Extract
|
- `docs/roadmap/future.md`: keep only deferred work and avoid completed
|
||||||
still-future work into `docs/roadmap/future.md`, then delete or replace the
|
implementation history.
|
||||||
stale file.
|
|
||||||
- `examples/config.yml`: keep as production-oriented config. Validate it with
|
- `examples/config.yml`: keep as production-oriented config. Validate it with
|
||||||
config-loading tests or an equivalent non-secret check.
|
config-loading tests or an equivalent non-secret check.
|
||||||
- `examples/minimal-config.yml`: add only if the implementation agent also adds
|
- `examples/minimal-config.yml`: add only if the implementation agent also adds
|
||||||
@@ -729,11 +727,11 @@ archive, remote storage, or resume behavior because those are not implemented.
|
|||||||
- Goal: validate examples and ensure roadmap docs contain only future/planned
|
- Goal: validate examples and ensure roadmap docs contain only future/planned
|
||||||
material.
|
material.
|
||||||
- Files to create/update/delete/move: update `examples/config.yml`; optionally
|
- Files to create/update/delete/move: update `examples/config.yml`; optionally
|
||||||
create `examples/minimal-config.yml` with validation coverage; extract
|
create `examples/minimal-config.yml` with validation coverage; keep
|
||||||
future-only content from `docs/roadmap/initial.md` into
|
`docs/roadmap/future.md` as the future-only roadmap after removing stale
|
||||||
`docs/roadmap/future.md`; delete or replace `docs/roadmap/initial.md`.
|
implementation-history material.
|
||||||
- Repository areas to inspect: `internal/config/*`, config tests,
|
- Repository areas to inspect: `internal/config/*`, config tests,
|
||||||
`docs/roadmap/initial.md`, current implemented feature set.
|
roadmap docs, current implemented feature set.
|
||||||
- Acceptance criteria: examples load successfully; roadmap files are clearly
|
- Acceptance criteria: examples load successfully; roadmap files are clearly
|
||||||
future-only; no completed MVP stage plan is linked as current docs.
|
future-only; no completed MVP stage plan is linked as current docs.
|
||||||
- Suggested validation commands: config example loading test, `go test ./...`,
|
- Suggested validation commands: config example loading test, `go test ./...`,
|
||||||
@@ -800,7 +798,5 @@ Manual review items:
|
|||||||
|
|
||||||
No questions block a correct documentation roadmap or migration.
|
No questions block a correct documentation roadmap or migration.
|
||||||
|
|
||||||
Recommendation: during the migration, delete or replace
|
Recommendation: keep `docs/roadmap/future.md` future-only. Do not reintroduce
|
||||||
`docs/roadmap/initial.md` after extracting any still-valid future work into a
|
completed implementation-history material as current project documentation.
|
||||||
future-only roadmap. Do not treat `docs/roadmap/initial.md` as current project
|
|
||||||
documentation.
|
|
||||||
|
|||||||
51
docs/roadmap/future.md
Normal file
51
docs/roadmap/future.md
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# Future Roadmap
|
||||||
|
|
||||||
|
This roadmap contains project work that is not implemented. Current behavior is
|
||||||
|
documented outside `docs/roadmap/`.
|
||||||
|
|
||||||
|
## Deferred: Automatic Storm Monitoring
|
||||||
|
|
||||||
|
Manual Storm Report generation is implemented through
|
||||||
|
`weatherreporter generate storm --start TIME --end TIME`. Automatic storm-event
|
||||||
|
evaluation remains deferred.
|
||||||
|
|
||||||
|
Proposed direction:
|
||||||
|
|
||||||
|
1. detect candidate events deterministically from alerts, forecast discussion,
|
||||||
|
weather story context when available, hourly thresholds, and material
|
||||||
|
forecast changes;
|
||||||
|
2. evaluate candidates through Scriptorium or another narrow evaluator adapter;
|
||||||
|
3. persist storm lifecycle state;
|
||||||
|
4. generate or update Storm Reports only when a meaningful event is present;
|
||||||
|
5. suppress ordinary low-impact thunder or rain chances.
|
||||||
|
|
||||||
|
Possible lifecycle states:
|
||||||
|
|
||||||
|
- `none`
|
||||||
|
- `monitoring`
|
||||||
|
- `active_report`
|
||||||
|
- `escalated`
|
||||||
|
- `deescalating`
|
||||||
|
- `resolved`
|
||||||
|
|
||||||
|
Acceptance criteria before implementation:
|
||||||
|
|
||||||
|
- scheduled reports and manual Storm Reports remain stable;
|
||||||
|
- candidate detection has fixture coverage;
|
||||||
|
- evaluator failures are inspectable and do not create noisy report output;
|
||||||
|
- manual Storm Report generation remains available.
|
||||||
|
|
||||||
|
## Deferred: Alternate Runtime Integrations
|
||||||
|
|
||||||
|
These ideas are not current behavior:
|
||||||
|
|
||||||
|
- native LLM client inside `weatherreporter`;
|
||||||
|
- database-backed state;
|
||||||
|
- public HTTP API;
|
||||||
|
- multi-location selection;
|
||||||
|
- daemon mode;
|
||||||
|
- multi-user authorization;
|
||||||
|
- plugin system.
|
||||||
|
|
||||||
|
Each item needs its own design note before implementation. Non-roadmap docs
|
||||||
|
must not describe these as available behavior.
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -22,9 +22,6 @@ workspace:
|
|||||||
data_packages_dir: data-packages
|
data_packages_dir: data-packages
|
||||||
preflight_dir: preflight
|
preflight_dir: preflight
|
||||||
|
|
||||||
reports:
|
|
||||||
output_dir: reports
|
|
||||||
|
|
||||||
dayparts:
|
dayparts:
|
||||||
- name: overnight
|
- name: overnight
|
||||||
start: "00:00"
|
start: "00:00"
|
||||||
|
|||||||
2
examples/minimal-config.yml
Normal file
2
examples/minimal-config.yml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
weather_api:
|
||||||
|
base_url: https://weather.api.example.com/
|
||||||
@@ -45,6 +45,26 @@ func TestLoadExampleConfig(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestLoadMinimalExampleConfig(t *testing.T) {
|
||||||
|
cfg, err := LoadFile(filepath.Join("..", "..", "examples", "minimal-config.yml"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("LoadFile() error = %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if cfg.WeatherAPI.BaseURL != "https://weather.api.example.com/" {
|
||||||
|
t.Fatalf("BaseURL = %q, want example URL", cfg.WeatherAPI.BaseURL)
|
||||||
|
}
|
||||||
|
if cfg.WeatherAPI.Units != "us" {
|
||||||
|
t.Fatalf("Units = %q, want default us", cfg.WeatherAPI.Units)
|
||||||
|
}
|
||||||
|
if cfg.Scriptorium.Binary != "scriptorium" {
|
||||||
|
t.Fatalf("Scriptorium.Binary = %q, want default scriptorium", cfg.Scriptorium.Binary)
|
||||||
|
}
|
||||||
|
if cfg.Workspace.Root != "workspace" {
|
||||||
|
t.Fatalf("Workspace.Root = %q, want default workspace", cfg.Workspace.Root)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestExplicitMissingConfigReturnsError(t *testing.T) {
|
func TestExplicitMissingConfigReturnsError(t *testing.T) {
|
||||||
_, err := LoadFile(filepath.Join(t.TempDir(), "missing.yml"))
|
_, err := LoadFile(filepath.Join(t.TempDir(), "missing.yml"))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user