{
  "schema_version": "fra-report-0.1",
  "template_version": "fra-report-0.1",
  "meta": {
    "run_id": "pcb-inshore",
    "name": "St. Andrew Bay — inshore",
    "mode": "inshore",
    "date_local": "2026-09-13",
    "tz_offset_hours": -5,
    "generated_at": "2026-09-13T19:00:04.420Z",
    "window": {
      "start": "06:00",
      "end": "13:00"
    },
    "launch": {
      "lat": 30.14,
      "lon": -85.7,
      "label": "St. Andrew Bay pass"
    },
    "destination": {
      "lat": 30.09,
      "lon": -85.68,
      "label": "Bay inside the pass"
    },
    "distance_nm": 3.2,
    "bearing_deg": 161,
    "ladder_legs": 5,
    "weatheragent_mode": "keyed",
    "sources": [
      "ndbc",
      "nws"
    ],
    "source_count": 2,
    "multi_source": true,
    "cache_hits": 2,
    "upstream_legs": 3,
    "upstream_requests": 1,
    "batched": true,
    "batch_size": 3,
    "cycle_per_source": {
      "ndbc": {
        "cadence_minutes": 10,
        "cycle": "2026-09-13T19:00:00.000Z",
        "next": "2026-09-13T19:10:00.000Z",
        "seconds_to_next": 596
      },
      "nws": {
        "cadence_minutes": 60,
        "cycle": "2026-09-13T19:00:00.000Z",
        "next": "2026-09-13T20:00:00.000Z",
        "seconds_to_next": 3596
      }
    },
    "cycle_ttl_seconds": 596,
    "cycle": "ndbc@2026-09-13T19:00:00.000Z|nws@2026-09-13T19:00:00.000Z",
    "slug": "fra-b5d2341e9a46",
    "cell_id": "30.100:-85.700",
    "visibility": "public",
    "user_key": "_operator"
  },
  "verdict": {
    "call": "go",
    "zone": "offshore",
    "score": 9.75,
    "score_max": 10,
    "confidence": "high",
    "degraded": false,
    "degraded_reason": null,
    "offshore_leg": "Your spot · 3.2 nm SSE",
    "headline": "GO — light inside, so work the pass and the flats while it holds.",
    "why": "At the spot it is 1 ft at 6 seconds, with 5.4 kt of wind. Nothing in the ladder argues against the run you planned — take it.",
    "mode": "inshore",
    "drivers": [
      {
        "code": "light_wind",
        "weight": "medium",
        "text": "Light wind (5.4 kt) keeps the drift slow and the water clean."
      }
    ],
    "limits": [
      {
        "field": "local sea state",
        "reason": "the nearest wave-capable station (42039) is 153 km away, so the sea state describes the area, not this exact point"
      },
      {
        "field": "water temperature",
        "reason": "station 42039 has no water-temperature sensor (upstream reports this as no sensor, not missing data)"
      }
    ],
    "limit_nm": 3.2,
    "hazards": [],
    "inside_hazards": [],
    "help": {
      "label": "Go",
      "one_line": "Full run as planned.",
      "means": "The water and the wind support the run you planned, start to finish.",
      "do": "Take the run you planned. Watch the afternoon if the report flags a build."
    }
  },
  "ladder": [
    {
      "leg": "launch",
      "label": "Launch · St. Andrew Bay pass",
      "nm": 0,
      "bearing_deg": 161,
      "point": {
        "lat": 30.14,
        "lon": -85.7
      },
      "station": {
        "id": "42039",
        "name": "PENSACOLA - 115NM SSE of Pensacola, FL",
        "distance_km": 156,
        "supported_params": [
          "airTemperature",
          "pressure",
          "waveDirection",
          "waveHeight",
          "wavePeriod",
          "windDirection",
          "windGust",
          "windSpeed"
        ],
        "missing_requested": [
          "waterTemperature"
        ]
      },
      "repeat_of_previous_station": false,
      "wave_sources_n": 1,
      "notices": [
        "cloudCover, pressure, waveDirection, waveHeight, wavePeriod came from a single source — there is no cross-source spread to read for these parameters.",
        "Station 42039 (PENSACOLA - 115NM SSE of Pensacola, FL) is 156 km from the requested point — it is the nearest station reporting the requested parameters."
      ],
      "seas": {
        "height_ft": 0.98,
        "period_s": 8,
        "direction_deg": 164,
        "direction_compass": "SSE",
        "per_source": {
          "ndbc": 0.98
        },
        "spread": null,
        "basis": "window maximum height; period and direction read at that hour"
      },
      "wind": {
        "speed_kt": 5.1,
        "speed_max_kt": 5.9,
        "gust_kt": 7.9,
        "direction_deg": 300,
        "direction_compass": "WNW",
        "per_source": {
          "ndbc": 5.8,
          "nws": 3
        },
        "spread": {
          "min": 3,
          "max": 5.8,
          "agree": 2
        },
        "basis": "mean sustained over the window; peak gust over the window"
      },
      "water": null,
      "score": 9.75,
      "sea_score": 10,
      "wind_score": 9.491249999999999,
      "ride_read": {
        "read": "Flat enough to forget about it.",
        "tone": "good"
      },
      "sources": [
        "ndbc",
        "nws"
      ],
      "missing": [
        {
          "field": "local sea state",
          "reason": "the nearest wave-capable station (42039) is 156 km away, so the sea state describes the area, not this exact point"
        },
        {
          "field": "water temperature",
          "reason": "station 42039 has no water-temperature sensor (upstream reports this as no sensor, not missing data)"
        }
      ],
      "ok": true,
      "reason": null,
      "reads": {
        "seas": {
          "read": "Flat. No ride to speak of — most boats will plane straight through it.",
          "tone": "good"
        },
        "period": {
          "read": "Comfortable spacing. Rideable at normal cruise.",
          "tone": "good"
        }
      }
    },
    {
      "leg": "1nm",
      "label": "1 miles",
      "nm": 0.8,
      "bearing_deg": 161,
      "point": {
        "lat": 30.1275,
        "lon": -85.695
      },
      "station": {
        "id": "42039",
        "name": "PENSACOLA - 115NM SSE of Pensacola, FL",
        "distance_km": 156,
        "supported_params": [
          "airTemperature",
          "pressure",
          "waveDirection",
          "waveHeight",
          "wavePeriod",
          "windDirection",
          "windGust",
          "windSpeed"
        ],
        "missing_requested": [
          "waterTemperature"
        ]
      },
      "repeat_of_previous_station": true,
      "wave_sources_n": 1,
      "notices": [
        "cloudCover, pressure, waveDirection, waveHeight, wavePeriod came from a single source — there is no cross-source spread to read for these parameters.",
        "Station 42039 (PENSACOLA - 115NM SSE of Pensacola, FL) is 156 km from the requested point — it is the nearest station reporting the requested parameters."
      ],
      "seas": {
        "height_ft": 0.98,
        "period_s": 8,
        "direction_deg": 164,
        "direction_compass": "SSE",
        "per_source": {
          "ndbc": 0.98
        },
        "spread": null,
        "basis": "window maximum height; period and direction read at that hour"
      },
      "wind": {
        "speed_kt": 5.1,
        "speed_max_kt": 5.9,
        "gust_kt": 7.9,
        "direction_deg": 300,
        "direction_compass": "WNW",
        "per_source": {
          "ndbc": 5.8,
          "nws": 3
        },
        "spread": {
          "min": 3,
          "max": 5.8,
          "agree": 2
        },
        "basis": "mean sustained over the window; peak gust over the window"
      },
      "water": null,
      "score": 9.75,
      "sea_score": 10,
      "wind_score": 9.491249999999999,
      "ride_read": {
        "read": "Flat enough to forget about it.",
        "tone": "good"
      },
      "sources": [
        "ndbc",
        "nws"
      ],
      "missing": [
        {
          "field": "local sea state",
          "reason": "the nearest wave-capable station (42039) is 156 km away, so the sea state describes the area, not this exact point"
        },
        {
          "field": "water temperature",
          "reason": "station 42039 has no water-temperature sensor (upstream reports this as no sensor, not missing data)"
        }
      ],
      "ok": true,
      "reason": null,
      "reads": {
        "seas": {
          "read": "Flat. No ride to speak of — most boats will plane straight through it.",
          "tone": "good"
        },
        "period": {
          "read": "Comfortable spacing. Rideable at normal cruise.",
          "tone": "good"
        }
      }
    },
    {
      "leg": "2nm",
      "label": "2 miles",
      "nm": 1.6,
      "bearing_deg": 161,
      "point": {
        "lat": 30.115,
        "lon": -85.69
      },
      "station": {
        "id": "42039",
        "name": "PENSACOLA - 115NM SSE of Pensacola, FL",
        "distance_km": 153,
        "supported_params": [
          "airTemperature",
          "pressure",
          "waveDirection",
          "waveHeight",
          "wavePeriod",
          "windDirection",
          "windGust",
          "windSpeed"
        ],
        "missing_requested": [
          "waterTemperature"
        ]
      },
      "repeat_of_previous_station": true,
      "wave_sources_n": 1,
      "notices": [
        "cloudCover, pressure, waveDirection, waveHeight, wavePeriod came from a single source — there is no cross-source spread to read for these parameters.",
        "Station 42039 (PENSACOLA - 115NM SSE of Pensacola, FL) is 153 km from the requested point — it is the nearest station reporting the requested parameters."
      ],
      "seas": {
        "height_ft": 0.98,
        "period_s": 6,
        "direction_deg": 168,
        "direction_compass": "SSE",
        "per_source": {
          "ndbc": 0.98
        },
        "spread": null,
        "basis": "window maximum height; period and direction read at that hour"
      },
      "wind": {
        "speed_kt": 5.4,
        "speed_max_kt": 5.9,
        "gust_kt": 7.9,
        "direction_deg": 300,
        "direction_compass": "WNW",
        "per_source": {
          "ndbc": 5.8,
          "nws": 4
        },
        "spread": {
          "min": 4,
          "max": 5.8,
          "agree": 2
        },
        "basis": "mean sustained over the window; peak gust over the window"
      },
      "water": null,
      "score": 9.75,
      "sea_score": 10,
      "wind_score": 9.491249999999999,
      "ride_read": {
        "read": "Flat enough to forget about it.",
        "tone": "good"
      },
      "sources": [
        "ndbc",
        "nws"
      ],
      "missing": [
        {
          "field": "local sea state",
          "reason": "the nearest wave-capable station (42039) is 153 km away, so the sea state describes the area, not this exact point"
        },
        {
          "field": "water temperature",
          "reason": "station 42039 has no water-temperature sensor (upstream reports this as no sensor, not missing data)"
        }
      ],
      "ok": true,
      "reason": null,
      "reads": {
        "seas": {
          "read": "Flat. No ride to speak of — most boats will plane straight through it.",
          "tone": "good"
        },
        "period": {
          "read": "Marginal spacing — the ride starts to feel mixed.",
          "tone": "ok"
        }
      }
    },
    {
      "leg": "2nm",
      "label": "2 miles",
      "nm": 2.4,
      "bearing_deg": 161,
      "point": {
        "lat": 30.1025,
        "lon": -85.685
      },
      "station": {
        "id": "42039",
        "name": "PENSACOLA - 115NM SSE of Pensacola, FL",
        "distance_km": 153,
        "supported_params": [
          "airTemperature",
          "pressure",
          "waveDirection",
          "waveHeight",
          "wavePeriod",
          "windDirection",
          "windGust",
          "windSpeed"
        ],
        "missing_requested": [
          "waterTemperature"
        ]
      },
      "repeat_of_previous_station": true,
      "wave_sources_n": 1,
      "notices": [
        "cloudCover, pressure, waveDirection, waveHeight, wavePeriod came from a single source — there is no cross-source spread to read for these parameters.",
        "Station 42039 (PENSACOLA - 115NM SSE of Pensacola, FL) is 153 km from the requested point — it is the nearest station reporting the requested parameters."
      ],
      "seas": {
        "height_ft": 0.98,
        "period_s": 6,
        "direction_deg": 168,
        "direction_compass": "SSE",
        "per_source": {
          "ndbc": 0.98
        },
        "spread": null,
        "basis": "window maximum height; period and direction read at that hour"
      },
      "wind": {
        "speed_kt": 5.4,
        "speed_max_kt": 5.9,
        "gust_kt": 7.9,
        "direction_deg": 300,
        "direction_compass": "WNW",
        "per_source": {
          "ndbc": 5.8,
          "nws": 4
        },
        "spread": {
          "min": 4,
          "max": 5.8,
          "agree": 2
        },
        "basis": "mean sustained over the window; peak gust over the window"
      },
      "water": null,
      "score": 9.75,
      "sea_score": 10,
      "wind_score": 9.491249999999999,
      "ride_read": {
        "read": "Flat enough to forget about it.",
        "tone": "good"
      },
      "sources": [
        "ndbc",
        "nws"
      ],
      "missing": [
        {
          "field": "local sea state",
          "reason": "the nearest wave-capable station (42039) is 153 km away, so the sea state describes the area, not this exact point"
        },
        {
          "field": "water temperature",
          "reason": "station 42039 has no water-temperature sensor (upstream reports this as no sensor, not missing data)"
        }
      ],
      "ok": true,
      "reason": null,
      "reads": {
        "seas": {
          "read": "Flat. No ride to speak of — most boats will plane straight through it.",
          "tone": "good"
        },
        "period": {
          "read": "Marginal spacing — the ride starts to feel mixed.",
          "tone": "ok"
        }
      }
    },
    {
      "leg": "destination",
      "label": "Your spot · 3.2 nm SSE",
      "nm": 3.2,
      "bearing_deg": 161,
      "point": {
        "lat": 30.09,
        "lon": -85.68
      },
      "station": {
        "id": "42039",
        "name": "PENSACOLA - 115NM SSE of Pensacola, FL",
        "distance_km": 153,
        "supported_params": [
          "airTemperature",
          "pressure",
          "waveDirection",
          "waveHeight",
          "wavePeriod",
          "windDirection",
          "windGust",
          "windSpeed"
        ],
        "missing_requested": [
          "waterTemperature"
        ]
      },
      "repeat_of_previous_station": true,
      "wave_sources_n": 1,
      "notices": [
        "cloudCover, pressure, waveDirection, waveHeight, wavePeriod came from a single source — there is no cross-source spread to read for these parameters.",
        "Station 42039 (PENSACOLA - 115NM SSE of Pensacola, FL) is 153 km from the requested point — it is the nearest station reporting the requested parameters."
      ],
      "seas": {
        "height_ft": 0.98,
        "period_s": 6,
        "direction_deg": 168,
        "direction_compass": "SSE",
        "per_source": {
          "ndbc": 0.98
        },
        "spread": null,
        "basis": "window maximum height; period and direction read at that hour"
      },
      "wind": {
        "speed_kt": 5.4,
        "speed_max_kt": 5.9,
        "gust_kt": 7.9,
        "direction_deg": 300,
        "direction_compass": "WNW",
        "per_source": {
          "ndbc": 5.8,
          "nws": 4
        },
        "spread": {
          "min": 4,
          "max": 5.8,
          "agree": 2
        },
        "basis": "mean sustained over the window; peak gust over the window"
      },
      "water": null,
      "score": 9.75,
      "sea_score": 10,
      "wind_score": 9.491249999999999,
      "ride_read": {
        "read": "Flat enough to forget about it.",
        "tone": "good"
      },
      "sources": [
        "ndbc",
        "nws"
      ],
      "missing": [
        {
          "field": "local sea state",
          "reason": "the nearest wave-capable station (42039) is 153 km away, so the sea state describes the area, not this exact point"
        },
        {
          "field": "water temperature",
          "reason": "station 42039 has no water-temperature sensor (upstream reports this as no sensor, not missing data)"
        }
      ],
      "ok": true,
      "reason": null,
      "reads": {
        "seas": {
          "read": "Flat. No ride to speak of — most boats will plane straight through it.",
          "tone": "good"
        },
        "period": {
          "read": "Marginal spacing — the ride starts to feel mixed.",
          "tone": "ok"
        }
      }
    }
  ],
  "spot": {
    "name": "St. Andrew Bay — inshore",
    "lat": 30.09,
    "lng": -85.68,
    "launch": {
      "lat": 30.14,
      "lon": -85.7,
      "label": "St. Andrew Bay pass"
    },
    "station": {
      "id": "42039",
      "name": "PENSACOLA - 115NM SSE of Pensacola, FL",
      "distance_km": 153,
      "supported_params": [
        "airTemperature",
        "pressure",
        "waveDirection",
        "waveHeight",
        "wavePeriod",
        "windDirection",
        "windGust",
        "windSpeed"
      ],
      "missing_requested": [
        "waterTemperature"
      ]
    }
  },
  "conditions": {
    "wind": {
      "speed_kt": 5.4,
      "gust_kt": 7.9,
      "direction_deg": 300,
      "direction_compass": "WNW",
      "per_source": {
        "ndbc": 5.8,
        "nws": 4
      },
      "spread": {
        "min": 4,
        "max": 5.8,
        "agree": 2
      }
    },
    "air_temp_f": 85.1,
    "pressure_inHg": 30.06,
    "pressure_trend_6h": null,
    "cloud_cover_pct": 40,
    "hourly": [
      {
        "time": "2026-09-13T17:00:00.000Z",
        "wind_speed_kt": 4.9,
        "wind_gust_kt": 6.9,
        "wind_dir_deg": 300,
        "wave_height_ft": 0.98,
        "wave_period_s": 6
      },
      {
        "time": "2026-09-13T18:00:00.000Z",
        "wind_speed_kt": 5.9,
        "wind_gust_kt": 7.9,
        "wind_dir_deg": 300,
        "wave_height_ft": 0.98,
        "wave_period_s": null
      },
      {
        "time": "2026-09-13T19:00:00.000Z",
        "wind_speed_kt": 7,
        "wind_gust_kt": 8,
        "wind_dir_deg": 250,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-13T20:00:00.000Z",
        "wind_speed_kt": 7,
        "wind_gust_kt": 9,
        "wind_dir_deg": 250,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-13T21:00:00.000Z",
        "wind_speed_kt": 7,
        "wind_gust_kt": 9,
        "wind_dir_deg": 270,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-13T22:00:00.000Z",
        "wind_speed_kt": 7,
        "wind_gust_kt": 9,
        "wind_dir_deg": 260,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-13T23:00:00.000Z",
        "wind_speed_kt": 6,
        "wind_gust_kt": 9,
        "wind_dir_deg": 260,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T00:00:00.000Z",
        "wind_speed_kt": 6,
        "wind_gust_kt": 8,
        "wind_dir_deg": 260,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T01:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 7,
        "wind_dir_deg": 270,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T02:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 7,
        "wind_dir_deg": 270,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T03:00:00.000Z",
        "wind_speed_kt": 6,
        "wind_gust_kt": 8,
        "wind_dir_deg": 280,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T04:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 7,
        "wind_dir_deg": 280,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T05:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 7,
        "wind_dir_deg": 290,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T06:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 7,
        "wind_dir_deg": 300,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T07:00:00.000Z",
        "wind_speed_kt": 4,
        "wind_gust_kt": 7,
        "wind_dir_deg": 300,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T08:00:00.000Z",
        "wind_speed_kt": 4,
        "wind_gust_kt": 7,
        "wind_dir_deg": 320,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T09:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 7,
        "wind_dir_deg": 320,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T10:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 7,
        "wind_dir_deg": 340,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T11:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 7,
        "wind_dir_deg": 340,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T12:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 8,
        "wind_dir_deg": 340,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T13:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 8,
        "wind_dir_deg": 330,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T14:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 8,
        "wind_dir_deg": 350,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T15:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 8,
        "wind_dir_deg": 350,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T16:00:00.000Z",
        "wind_speed_kt": 4,
        "wind_gust_kt": 6,
        "wind_dir_deg": 340,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T17:00:00.000Z",
        "wind_speed_kt": 4,
        "wind_gust_kt": 6,
        "wind_dir_deg": 320,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T18:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 7,
        "wind_dir_deg": 290,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T19:00:00.000Z",
        "wind_speed_kt": 6,
        "wind_gust_kt": 8,
        "wind_dir_deg": 270,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T20:00:00.000Z",
        "wind_speed_kt": 6,
        "wind_gust_kt": 9,
        "wind_dir_deg": 260,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T21:00:00.000Z",
        "wind_speed_kt": 6,
        "wind_gust_kt": 9,
        "wind_dir_deg": 260,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T22:00:00.000Z",
        "wind_speed_kt": 6,
        "wind_gust_kt": 9,
        "wind_dir_deg": 270,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-14T23:00:00.000Z",
        "wind_speed_kt": 6,
        "wind_gust_kt": 8,
        "wind_dir_deg": 260,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T00:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 7,
        "wind_dir_deg": 260,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T01:00:00.000Z",
        "wind_speed_kt": 4,
        "wind_gust_kt": 6,
        "wind_dir_deg": 270,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T02:00:00.000Z",
        "wind_speed_kt": 4,
        "wind_gust_kt": 6,
        "wind_dir_deg": 270,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T03:00:00.000Z",
        "wind_speed_kt": 4,
        "wind_gust_kt": 6,
        "wind_dir_deg": 260,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T04:00:00.000Z",
        "wind_speed_kt": 4,
        "wind_gust_kt": 6,
        "wind_dir_deg": 270,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T05:00:00.000Z",
        "wind_speed_kt": 3,
        "wind_gust_kt": 5,
        "wind_dir_deg": 300,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T06:00:00.000Z",
        "wind_speed_kt": 3,
        "wind_gust_kt": 5,
        "wind_dir_deg": 310,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T07:00:00.000Z",
        "wind_speed_kt": 3,
        "wind_gust_kt": 5,
        "wind_dir_deg": 330,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T08:00:00.000Z",
        "wind_speed_kt": 4,
        "wind_gust_kt": 5,
        "wind_dir_deg": 0,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T09:00:00.000Z",
        "wind_speed_kt": 4,
        "wind_gust_kt": 5,
        "wind_dir_deg": 20,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T10:00:00.000Z",
        "wind_speed_kt": 4,
        "wind_gust_kt": 6,
        "wind_dir_deg": 30,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T11:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 7,
        "wind_dir_deg": 40,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T12:00:00.000Z",
        "wind_speed_kt": 5,
        "wind_gust_kt": 8,
        "wind_dir_deg": 40,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T13:00:00.000Z",
        "wind_speed_kt": 6,
        "wind_gust_kt": 9,
        "wind_dir_deg": 50,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T14:00:00.000Z",
        "wind_speed_kt": 7,
        "wind_gust_kt": 9,
        "wind_dir_deg": 60,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T15:00:00.000Z",
        "wind_speed_kt": 8,
        "wind_gust_kt": 10,
        "wind_dir_deg": 60,
        "wave_height_ft": null,
        "wave_period_s": null
      },
      {
        "time": "2026-09-15T16:00:00.000Z",
        "wind_speed_kt": 9,
        "wind_gust_kt": 11,
        "wind_dir_deg": 70,
        "wave_height_ft": null,
        "wave_period_s": null
      }
    ],
    "reads": {
      "wind": {
        "read": "Light breeze. Good drift speed and an easy anchor set.",
        "tone": "good"
      },
      "gust": {
        "read": "Steady air — gusts barely above the average.",
        "tone": "good"
      },
      "air": {
        "read": "85°F at the ramp — hot. Water, shade and sun protection are the kit today.",
        "tone": "ok"
      },
      "pressure": {
        "read": "Normal at 30.06 inHg.",
        "tone": "ok"
      },
      "cloud": {
        "read": "Partly cloudy — good light, fish roam further off the structure.",
        "tone": "good"
      }
    }
  },
  "water": {
    "surface_temp_f": null,
    "per_source": null,
    "reads": {
      "temp": {
        "read": "Not available for this point.",
        "tone": "unknown"
      }
    }
  },
  "tides": {
    "station": {
      "id": "8729136",
      "name": "Channel entrance",
      "lat": 30.125,
      "lng": -85.73,
      "distance_nm": 1.8
    },
    "datum": "MLLW",
    "units": "english",
    "date": "2026-09-12",
    "stage": "rising",
    "events": [
      {
        "time": "2026-09-12 06:24",
        "type": "low",
        "height_ft": 0.834
      },
      {
        "time": "2026-09-12 23:16",
        "type": "high",
        "height_ft": 1.367
      }
    ],
    "stage_read": {
      "read": "Rising — moving water; the most productive stage at a pass or inlet.",
      "tone": "good"
    },
    "source": {
      "owner": "fishingreportagent",
      "source": "NOAA CO-OPS",
      "licence": "US Government work — public domain",
      "attribution_required": false
    }
  },
  "astro": {
    "date": "2026-09-13",
    "sun": {
      "rise": "06:26",
      "set": "18:51",
      "civil_twilight_begin": "06:02",
      "civil_twilight_end": "19:15",
      "legal_light_start": "06:02",
      "legal_light_end": "19:15"
    },
    "moon": {
      "phase": "Waxing Crescent",
      "illumination": "8%",
      "rise": "08:53",
      "set": "20:09",
      "upper_transit": "14:34",
      "lower_transit": null
    },
    "solunar": {
      "method": "Computed locally from public-domain USNO ephemeris: major +/-60 min around moon transit, minor +/-45 min around moonrise/moonset. An approximation of the solunar model, not a licensed solunar table.",
      "windows": [
        {
          "type": "major",
          "label": "Moon underfoot",
          "start": "01:59",
          "end": "03:59",
          "anchor": "02:59",
          "crossesMidnight": true,
          "strength": "Major",
          "in_trip_window": false,
          "read": "Major period (Moon underfoot) falls outside your trip window."
        },
        {
          "type": "minor",
          "label": "Moonrise",
          "start": "08:08",
          "end": "09:38",
          "anchor": "08:53",
          "crossesMidnight": false,
          "strength": "Minor",
          "in_trip_window": true,
          "read": "Inside your trip window — Moonrise. A secondary push, worth a pass."
        },
        {
          "type": "major",
          "label": "Moon overhead",
          "start": "13:34",
          "end": "15:34",
          "anchor": "14:34",
          "crossesMidnight": false,
          "strength": "Major",
          "in_trip_window": false,
          "read": "Major period (Moon overhead) falls outside your trip window."
        },
        {
          "type": "minor",
          "label": "Moonset",
          "start": "19:24",
          "end": "20:54",
          "anchor": "20:09",
          "crossesMidnight": false,
          "strength": "Minor",
          "in_trip_window": false,
          "read": "Minor period (Moonset) falls outside your trip window."
        }
      ]
    },
    "source": {
      "owner": "fishingreportagent",
      "source": "USNO Astronomical Applications API",
      "licence": "US Government work — public domain",
      "attribution_required": false,
      "solunar_note": "solunar windows computed locally, not a licensed solunar table"
    }
  },
  "ladder_collapse": {
    "total_legs": 5,
    "legs_with_station": 5,
    "distinct_stations": 1,
    "collapsed": true,
    "station_id": "42039",
    "distance_km": 153,
    "note": "All 5 sampled points resolve to the same station (42039). This is ONE sea-state reading shown against several coordinates — not 5 independent readings, and not a spatial gradient."
  },
  "notices": [
    "cloudCover, pressure, waveDirection, waveHeight, wavePeriod came from a single source — there is no cross-source spread to read for these parameters.",
    "Station 42039 (PENSACOLA - 115NM SSE of Pensacola, FL) is 156 km from the requested point — it is the nearest station reporting the requested parameters.",
    "Station 42039 (PENSACOLA - 115NM SSE of Pensacola, FL) is 153 km from the requested point — it is the nearest station reporting the requested parameters."
  ],
  "missing": [
    {
      "field": "local sea state",
      "reason": "the nearest wave-capable station (42039) is 153 km away, so the sea state describes the area, not this exact point"
    },
    {
      "field": "water temperature",
      "reason": "station 42039 has no water-temperature sensor (upstream reports this as no sensor, not missing data)"
    }
  ],
  "attribution": [
    "Contains data from NOAA (National Data Buoy Center buoy observations; National Weather Service gridpoint forecasts) — US Government work — public domain. Provided by The Weather Agent.",
    "Tides: NOAA CO-OPS (US Government work — public domain). Astronomy: USNO Astronomical Applications API (public domain). Solunar windows computed locally from USNO ephemeris — an approximation, not a licensed solunar table.",
    "Report generated by FishingReportAgent. The Weather Agent and FishingReportAgent are separate services; marine/weather normalization is The Weather Agent's, the fishing interpretation is ours."
  ],
  "disclaimer": "The Weather Agent relays and normalizes data from third-party upstream providers. Data is provided \"as is\", without warranty of any kind, and may be delayed, incomplete or inaccurate. It is NOT a substitute for official marine forecasts, notices to mariners, or your own judgment. Independently verify all data against official sources before acting on it — especially any decision affecting personal safety or navigation.",
  "provenance": {
    "per_field": {
      "marine_weather": {
        "owner": "weatheragent",
        "source": "ndbc, nws",
        "cycle": "2026-09-13T18:50:00.000Z",
        "fetched_at": "2026-09-13T19:00:11.650Z",
        "licence": "Per-upstream; NOAA public domain (others catalog-only today)",
        "attribution": "Contains data from NOAA (public domain) via The Weather Agent."
      },
      "tides": {
        "owner": "fishingreportagent",
        "source": "NOAA CO-OPS",
        "licence": "US Government work — public domain",
        "fetched_at": "2026-09-13T19:00:11.650Z"
      },
      "astro": {
        "owner": "fishingreportagent",
        "source": "USNO",
        "licence": "US Government work — public domain",
        "fetched_at": "2026-09-13T19:00:11.650Z"
      }
    }
  }
}