Files
weatherreporter/docs/internal/changes.md

2.0 KiB

Changes Internals

This document describes structured Recent Changes comparison.

Purpose

internal/changes compares current and prior briefing packages and emits compact change records for prompt input data packages.

Inputs And Outputs

Inputs:

  • prior briefing package
  • current briefing package
  • comparison thresholds from configuration

Outputs:

  • ordered changes.Change items with type, message, previous value, and current value where useful

Boundaries

  • This package compares structured briefing data only.
  • It does not read filesystem state, find prior snapshots, render Markdown, invoke Scriptorium, or compare generated report text.

Config Fields Used

The app maps these fields into comparison thresholds:

  • recent_change.temperature_degrees
  • recent_change.precip_probability_points
  • recent_change.wind_gust_miles_per_hour
  • recent_change.precip_timing_shift_minutes

External Adapters Used

None.

State Or Manifest Behavior

None directly. The app loads prior briefing snapshots through internal/state before calling comparison functions.

Skip And Resume Behavior

No resume behavior. When the app has no prior comparable snapshot, it sends an empty Recent Changes list without calling a comparison function.

Failure Behavior

  • Daily comparison requires both inputs to contain Daily briefing content.
  • 3-Day comparison requires both inputs to contain 3-Day briefing content.
  • Weekend comparison requires both inputs to contain Weekend briefing content.
  • Storm Report currently has no comparison implementation, so the app leaves Recent Changes empty for Storm reports.

Tests

Inspect:

  • internal/changes/daily_test.go
  • internal/changes/three_day_test.go
  • internal/changes/weekend_test.go
  • internal/app/app_test.go

Invariants

  • Recent Changes are based on structured snapshots, not Markdown report text.
  • Report compatibility is determined outside this package by report definitions and state lookup.
  • Output stays compact enough for prompt input.