[{"slug":"ZV-2026-1156","server_name":"noaa-marine.caseyjhand.com","severity":"breaking","title":"noaa-marine.caseyjhand.com: Enum value CD removed from datum on noaa_marine_get_tide_predictions.","summary":"[risky] Description of noaa_marine_find_stations changed (29% word delta). [risky] Description of noaa_marine_get_currents changed (50% word delta). [risky] Optional field bin was added to noaa_marine_get_currents; may shift model behaviour. [risky] Optional field limit was added to noaa_marine_get_currents; may shift model behaviour. [risky] Optional field offset was added to noaa_marine_get_currents; may shift model behaviour. [risky] Field bin was added to noaa_marine_get_currents output. [risky] Field depth was added to noaa_marine_get_currents output. [risky] Field next_offset was added to noaa_marine_get_currents output. [risky] Field notice was added to noaa_marine_get_currents output. [risky] Field page_offset was added to noaa_marine_get_currents output. [risky] Field rows_matched was added to noaa_marine_get_currents output. [risky] Field rows_returned was added to noaa_marine_get_currents output. [risky] Field truncated was added to noaa_marine_get_currents output. [risky] Description of noaa_marine_get_tide_predictions changed (51% word delta). [risky] Optional field limit was added to noaa_marine_get_tide_predictions; may shift model behaviour. [risky] Optional field offset was added to noaa_marine_get_tide_predictions; may shift model behaviour. [breaking] Enum value CD removed from datum on noaa_marine_get_tide_predictions. [risky] Enum value DTL added to datum on noaa_marine_get_tide_predictions. [risky] Enum value NAVD added to datum on noaa_marine_get_tide_predictions. [risky] Enum value CRD added to datum on noaa_marine_get_tide_predictions. [risky] Field next_offset was added to noaa_marine_get_tide_predictions output. [risky] Field notice was added to noaa_marine_get_tide_predictions output. [risky] Field page_offset was added to noaa_marine_get_tide_predictions output. [risky] Field rows_matched was added to noaa_marine_get_tide_predictions output. [risky] Field rows_returned was added to noaa_marine_get_tide_predictions output. [risky] Field t","changes":[{"kind":"description_changed","tool":"noaa_marine_find_stations","after":"Find CO-OPS tide, water-level and current stations and NDBC buoys near a location, by name, or by station ID, returning a unified list with source, data capabilities, coordinates, and — for NDBC — the physical platform class. This is the required first step for resolving a place name, a coordinate pair, or a bare station number to the station IDs the data tools take: CO-OPS tide and water-level IDs are numeric (e.g. 9447130 for Seattle), CO-OPS current IDs are alphanumeric (e.g. ACT4176), and NDBC buoy IDs are 5-character alphanumeric codes (e.g. 46041). Two axes are reported separately — capabilities and type name the data products a station serves (tide, current, water_level, met, current_profile, water_quality), while platform is the NDBC physical classification (buoy, fixed, oilrig, dart, tao, usv, other) that CO-OPS stations do not carry. Supply latitude and longitude together for a proximity search, or query for a name-or-ID substring matched against both sources, or state for CO-OPS coverage in one state; the filters combine, and results lead with an exact ID match unless a proximity search is ordering them by distance. A search that matches nothing is a success with total_found: 0 carrying an echo of the filters that were applied, and a search whose catalogs did not all answer says which source is missing. CO-OPS prediction stations carry a third axis as well, prediction_class, which says what a station can actually answer: a tide station is either reference, serving both hilo and the 6-minute curve, or subordinate, serving hilo only, while a current station carries its class per depth bin in bins[] — a harmonic or subordinate bin serves the normal flood/ebb/slack series, and a weak_and_variable bin may instead answer noaa_marine_get_currents with a coverage statement and no events, or report that CO-OPS publishes no predictions for it at all, so prefer a harmonic bin when one is in range.","before":"Find CO-OPS tide, water-level and current stations and NDBC buoys near a location, by name, or by station ID, returning a unified list with source, data capabilities, coordinates, and — for NDBC — the physical platform class. This is the required first step for resolving a place name, a coordinate pair, or a bare station number to the station IDs the data tools take: CO-OPS tide and water-level IDs are numeric (e.g. 9447130 for Seattle), CO-OPS current IDs are alphanumeric (e.g. ACT4176), and NDBC buoy IDs are 5-character alphanumeric codes (e.g. 46041). Two axes are reported separately — capabilities and type name the data products a station serves (tide, current, water_level, met, current_profile, water_quality), while platform is the NDBC physical classification (buoy, fixed, oilrig, dart, tao, usv, other) that CO-OPS stations do not carry. Supply latitude and longitude together for a proximity search, or query for a name-or-ID substring matched against both sources, or state for CO-OPS coverage in one state; the filters combine, and results lead with an exact ID match unless a proximity search is ordering them by distance. A search that matches nothing is a success with total_found: 0 carrying an echo of the filters that were applied, and a search whose catalogs did not all answer says which source is missing. Note that CO-OPS current stations are cataloged by monitoring capability rather than prediction availability, so when noaa_marine_get_currents returns no_predictions for one, try the next nearest current station.","detail":"Description of `noaa_marine_find_stations` changed (29% word delta).","severity":"risky","descriptionDelta":0.29032258064516125},{"kind":"description_changed","tool":"noaa_marine_get_currents","after":"Tidal current predictions for a CO-OPS current station: max flood and ebb speeds, slack times, and the station's mean flood and ebb bearings. These are forecast predictions from CO-OPS, distinct from noaa_marine_get_current_profile, which returns NDBC observed ocean-current measurements binned by depth. The default MAX_SLACK interval is the practical planning view, showing when currents peak and when slack water occurs, and a 6-minute interval returns the continuous curve for detailed analysis, each row carrying its own flood/ebb/slack sense. A station can publish predictions for several depth bins at different depths: bin selects one, omitting it takes the CO-OPS default of the shallowest bin, and the bin and its depth are echoed on every response — read bins[] on a noaa_marine_find_stations current row for the bins a station actually has. A station whose currents CO-OPS will not predict as discrete events answers with an empty list and its own wording in the notice rather than an error. Both intervals are bounded by response size: a range whose rows fit is returned whole, a longer one returns the leading rows with rows_matched, rows_returned, and next_offset reporting how much matched and which offset reaches the rest, and offset and limit walk whichever series the interval selects. Current station IDs are alphanumeric (e.g. ACT4176), distinct from the numeric tide and water-level IDs, and the date range is limited to 1 year per request — use noaa_marine_find_stations with types=[\"current\"] to obtain a valid current station ID.","before":"Tidal current predictions for a CO-OPS current station: max flood and ebb speeds, slack times, and directions. These are forecast predictions from CO-OPS, distinct from noaa_marine_get_current_profile, which returns NDBC observed ocean-current measurements binned by depth. The default MAX_SLACK interval is the practical planning view, showing when currents peak and when slack water occurs, and a 6-minute interval returns the continuous curve for detailed analysis. Current station IDs are alphanumeric (e.g. ACT4176), distinct from the numeric tide and water-level IDs, and the date range is limited to 1 year per request — use noaa_marine_find_stations with types=[\"current\"] to obtain a valid current station ID.","detail":"Description of `noaa_marine_get_currents` changed (50% word delta).","severity":"risky","descriptionDelta":0.5},{"kind":"input_property_added","path":"inputSchema.properties.bin","tool":"noaa_marine_get_currents","after":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Depth bin to predict for, taken from the bins[] array on a noaa_marine_find_stations current row (e.g. 15, 10 or 1 at PUG1515). Omit to take the CO-OPS default, which is the shallowest bin. A bin the station does not publish comes back as bin_unavailable naming the bins it does."},"detail":"Optional field `bin` was added to `noaa_marine_get_currents`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.limit","tool":"noaa_marine_get_currents","after":{"type":"integer","maximum":9007199254740991,"minimum":1,"description":"Maximum prediction rows to return on this page — max/slack events or 6-minute rows, whichever the interval selects — for a caller that wants fewer than the response budget allows. Omit for the largest page that fits; a value larger than the budget allows does not widen the page."},"detail":"Optional field `limit` was added to `noaa_marine_get_currents`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.offset","tool":"noaa_marine_get_currents","after":{"type":"integer","default":0,"maximum":9007199254740991,"minimum":0,"description":"Row offset into the matched prediction series — the max/slack events on the MAX_SLACK interval, the 6-minute curve on 6min — for reading a range whose rows do not fit one response. 0 (default) starts at the first row; pass the next_offset from a previous call to continue. An offset past the last row returns an empty page rather than an error."},"detail":"Optional field `offset` was added to `noaa_marine_get_currents`; may shift model behaviour.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.bin","tool":"noaa_marine_get_currents","after":{"type":["number","null"],"description":"Depth bin CO-OPS answered with — the requested bin, or its default shallowest bin when none was requested. Null when the response carried no prediction rows."},"detail":"Field `bin` was added to `noaa_marine_get_currents` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.depth","tool":"noaa_marine_get_currents","after":{"type":["number","null"],"description":"Depth of the returned bin, in the requested units: feet under english, meters under metric. Distinct from the bins[].depth on a noaa_marine_find_stations row, which the catalog always publishes in feet. Null when CO-OPS publishes no depth for the bin, or when the response carried no prediction rows."},"detail":"Field `depth` was added to `noaa_marine_get_currents` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.next_offset","tool":"noaa_marine_get_currents","after":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"null"}],"description":"Offset to pass as offset on the next call, or null when this page reaches the last matched row. Absent when the whole matched series was returned."},"detail":"Field `next_offset` was added to `noaa_marine_get_currents` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.notice","tool":"noaa_marine_get_currents","after":{"type":"string","description":"CO-OPS's own statement about the station when it returned that instead of prediction events — the answer to report, not a failure — or what this page of the prediction series covers and how to reach the next one."},"detail":"Field `notice` was added to `noaa_marine_get_currents` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.page_offset","tool":"noaa_marine_get_currents","after":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Row offset this page starts at, echoed from the request. Absent when the whole matched series was returned."},"detail":"Field `page_offset` was added to `noaa_marine_get_currents` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.rows_matched","tool":"noaa_marine_get_currents","after":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Prediction rows the requested date range matched, before the page was cut. Absent when the whole matched series was returned."},"detail":"Field `rows_matched` was added to `noaa_marine_get_currents` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.rows_returned","tool":"noaa_marine_get_currents","after":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Prediction rows this page carries — the length of events on the MAX_SLACK interval, of predictions on 6min. Absent when the whole matched series was returned."},"detail":"Field `rows_returned` was added to `noaa_marine_get_currents` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.truncated","tool":"noaa_marine_get_currents","after":{"type":"boolean","description":"True when this page stops short of the last matched row, so further rows remain at next_offset. False on the final page and on a page past the end. Absent when the whole matched series was returned."},"detail":"Field `truncated` was added to `noaa_marine_get_currents` output.","severity":"risky"},{"kind":"description_changed","tool":"noaa_marine_get_tide_predictions","after":"High and low tide predictions for a CO-OPS tide station over a date range. The default hilo interval returns the time, height, and tide type (H for high, L for low) of each event, while the 6-minute interval returns the detailed tide curve. Most tide stations are subordinate — CO-OPS derives their high and low events as offsets from a reference station and publishes no 6-minute curve for them — so interval=\"6min\" reaches only a reference station, and a subordinate station comes back as subordinate_no_6min naming the reference station to ask instead; the prediction_class on a noaa_marine_find_stations tide row says which kind a station is before the call. Datum defaults to MLLW, mean lower low water, the standard for US nautical charts, and the date range is limited to 1 year per request. A range whose predictions fit the response budget is returned whole; a longer one is returned as a page of leading rows, and rows_matched, rows_returned, and next_offset then report how much matched and which offset reaches the rest, so a year of events is read by walking offset rather than by splitting the range. Use noaa_marine_find_stations first to resolve a station name or location to a numeric station ID.","before":"High and low tide predictions for a CO-OPS tide station over a date range. The default hilo interval returns the time, height, and tide type (H for high, L for low) of each event, while the 6-minute interval returns the detailed tide curve. Datum defaults to MLLW, mean lower low water, the standard for US nautical charts, and the date range is limited to 1 year per request, so split longer ranges across multiple calls — use noaa_marine_find_stations first to resolve a station name or location to a numeric station ID.","detail":"Description of `noaa_marine_get_tide_predictions` changed (51% word delta).","severity":"risky","descriptionDelta":0.5123966942148761},{"kind":"input_property_added","path":"inputSchema.properties.limit","tool":"noaa_marine_get_tide_predictions","after":{"type":"integer","maximum":9007199254740991,"minimum":1,"description":"Maximum prediction rows to return on this page, for a caller that wants fewer than the response budget allows. Omit for the largest page that fits; a value larger than the budget allows does not widen the page."},"detail":"Optional field `limit` was added to `noaa_marine_get_tide_predictions`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.offset","tool":"noaa_marine_get_tide_predictions","after":{"type":"integer","default":0,"maximum":9007199254740991,"minimum":0,"description":"Row offset into the matched prediction series, for reading a range whose rows do not fit one response. 0 (default) starts at the first row; pass the next_offset from a previous call to continue. An offset past the last row returns an empty page rather than an error."},"detail":"Optional field `offset` was added to `noaa_marine_get_tide_predictions`; may shift model behaviour.","severity":"risky"},{"kind":"enum_value_removed","path":"inputSchema.properties.datum","tool":"noaa_marine_get_tide_predictions","before":"CD","detail":"Enum value `CD` removed from `datum` on `noaa_marine_get_tide_predictions`.","severity":"breaking"},{"kind":"enum_value_added","path":"inputSchema.properties.datum","tool":"noaa_marine_get_tide_predictions","after":"DTL","detail":"Enum value `DTL` added to `datum` on `noaa_marine_get_tide_predictions`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.datum","tool":"noaa_marine_get_tide_predictions","after":"NAVD","detail":"Enum value `NAVD` added to `datum` on `noaa_marine_get_tide_predictions`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.datum","tool":"noaa_marine_get_tide_predictions","after":"CRD","detail":"Enum value `CRD` added to `datum` on `noaa_marine_get_tide_predictions`.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.next_offset","tool":"noaa_marine_get_tide_predictions","after":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"null"}],"description":"Offset to pass as offset on the next call, or null when this page reaches the last matched row. Absent when the whole matched series was returned."},"detail":"Field `next_offset` was added to `noaa_marine_get_tide_predictions` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.notice","tool":"noaa_marine_get_tide_predictions","after":{"type":"string","description":"What this page of the prediction series covers and how to reach the next one. Present only when the response is a page rather than the whole matched series."},"detail":"Field `notice` was added to `noaa_marine_get_tide_predictions` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.page_offset","tool":"noaa_marine_get_tide_predictions","after":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Row offset this page starts at, echoed from the request. Absent when the whole matched series was returned."},"detail":"Field `page_offset` was added to `noaa_marine_get_tide_predictions` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.rows_matched","tool":"noaa_marine_get_tide_predictions","after":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Prediction rows the requested date range matched, before the page was cut. Absent when the whole matched series was returned."},"detail":"Field `rows_matched` was added to `noaa_marine_get_tide_predictions` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.rows_returned","tool":"noaa_marine_get_tide_predictions","after":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Prediction rows this page carries — the length of predictions. Absent when the whole matched series was returned."},"detail":"Field `rows_returned` was added to `noaa_marine_get_tide_predictions` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.truncated","tool":"noaa_marine_get_tide_predictions","after":{"type":"boolean","description":"True when this page stops short of the last matched row, so further rows remain at next_offset. False on the final page and on a page past the end. Absent when the whole matched series was returned."},"detail":"Field `truncated` was added to `noaa_marine_get_tide_predictions` output.","severity":"risky"},{"kind":"description_changed","tool":"noaa_marine_get_water_level","after":"Observed water level, real-time or historical, for a CO-OPS water-level station, paired with tide predictions for the same period so the residual (observed − predicted) shows storm surge when positive and anomalous drawdown when negative. The interval selects the cadence: 6min (default) is the full curve, hourly and high_low cover months to a year of the same series at far fewer rows, and daily_mean serves Great Lakes stations only. Each interval carries its own CO-OPS range ceiling — 31 days for 6min, 365 for hourly and high_low, 3655 for daily_mean — rejected locally before the call, and only 6min and hourly report a residual. Observations and predictions are fetched independently, so when the prediction series is empty, predictions_status says whether CO-OPS has none for this station and range or the prediction fetch failed — the observed series returns either way, and residual_summary is present only when both series are and the cadence supports the join. A sensor outage leaves slots with no reading; those slots are dropped and counted in gaps_dropped, so the observed series is continuous across the range only when that count is absent. A range whose rows fit the response budget is returned whole; a longer one returns the leading rows, with rows_matched, rows_returned, and next_offset reporting how much matched and which offset reaches the rest. Use noaa_marine_find_stations first to resolve a station name or location to a valid station ID.","before":"Observed water level, real-time or historical, for a CO-OPS water-level station, paired with 6-minute tide predictions for the same period so the residual (observed − predicted) shows storm surge when positive and anomalous drawdown when negative. Observations and predictions are fetched independently, so when the prediction series is empty, predictions_status says whether CO-OPS has none for this station and range or the prediction fetch failed — the observed series returns either way, and residual_summary is present only when both series are. Date range is limited to 31 days per request, so split longer ranges into multiple calls, and use noaa_marine_find_stations first to resolve a station name or location to a valid station ID.","detail":"Description of `noaa_marine_get_water_level` changed (55% word delta).","severity":"risky","descriptionDelta":0.5503355704697986},{"kind":"input_property_added","path":"inputSchema.properties.interval","tool":"noaa_marine_get_water_level","after":{"enum":["6min","hourly","high_low","daily_mean"],"type":"string","default":"6min","description":"Observed cadence. 6min (default) is the full curve, 31 days per request, the only one carrying a quality flag. hourly is hourly heights, 365 days per request, and reports a residual against the hourly prediction series. high_low is the observed high and low waters with their H/HH/L/LL classification, 365 days per request, and reports no residual because observed extremes do not fall on predicted extreme times. daily_mean is the daily mean water level, 3655 days per request, published at Great Lakes stations only and with no paired prediction series; a coastal station comes back as great_lakes_only."},"detail":"Optional field `interval` was added to `noaa_marine_get_water_level`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.limit","tool":"noaa_marine_get_water_level","after":{"type":"integer","maximum":9007199254740991,"minimum":1,"description":"Maximum observation rows to return on this page, for a caller that wants fewer than the response budget allows. Omit for the largest page that fits; a value larger than the budget allows does not widen the page."},"detail":"Optional field `limit` was added to `noaa_marine_get_water_level`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.offset","tool":"noaa_marine_get_water_level","after":{"type":"integer","default":0,"maximum":9007199254740991,"minimum":0,"description":"Row offset into the matched observation series, for reading a range whose rows do not fit one response. 0 (default) starts at the first row; pass the next_offset from a previous call to continue. An offset past the last row returns an empty page rather than an error."},"detail":"Optional field `offset` was added to `noaa_marine_get_water_level`; may shift model behaviour.","severity":"risky"},{"kind":"enum_value_removed","path":"inputSchema.properties.datum","tool":"noaa_marine_get_water_level","before":"CD","detail":"Enum value `CD` removed from `datum` on `noaa_marine_get_water_level`.","severity":"breaking"},{"kind":"enum_value_added","path":"inputSchema.properties.datum","tool":"noaa_marine_get_water_level","after":"NAVD","detail":"Enum value `NAVD` added to `datum` on `noaa_marine_get_water_level`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.datum","tool":"noaa_marine_get_water_level","after":"IGLD","detail":"Enum value `IGLD` added to `datum` on `noaa_marine_get_water_level`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.datum","tool":"noaa_marine_get_water_level","after":"LWD","detail":"Enum value `LWD` added to `datum` on `noaa_marine_get_water_level`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.datum","tool":"noaa_marine_get_water_level","after":"CRD","detail":"Enum value `CRD` added to `datum` on `noaa_marine_get_water_level`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.datum","tool":"noaa_marine_get_water_level","after":"LWI","detail":"Enum value `LWI` added to `datum` on `noaa_marine_get_water_level`.","severity":"risky"},{"kind":"enum_value_added","path":"inputSchema.properties.datum","tool":"noaa_marine_get_water_level","after":"HWI","detail":"Enum value `HWI` added to `datum` on `noaa_marine_get_water_level`.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.gaps_dropped","tool":"noaa_marine_get_water_level","after":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Number of sample slots CO-OPS sent with no reading, dropped from observations. Present only when there was at least one. The observed series is therefore not continuous across the requested range: it has this many missing slots, and rows_matched counts only the slots that carry a value."},"detail":"Field `gaps_dropped` was added to `noaa_marine_get_water_level` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.interval","tool":"noaa_marine_get_water_level","after":{"enum":["6min","hourly","high_low","daily_mean"],"type":"string","description":"Observed cadence echoed from the request — the CO-OPS product these rows came from, and what decides whether quality, type, and residual_summary are populated."},"detail":"Field `interval` was added to `noaa_marine_get_water_level` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.next_offset","tool":"noaa_marine_get_water_level","after":{"anyOf":[{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991},{"type":"null"}],"description":"Offset to pass as offset on the next call, or null when this page reaches the last matched observation. Absent when the whole matched series was returned."},"detail":"Field `next_offset` was added to `noaa_marine_get_water_level` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.page_offset","tool":"noaa_marine_get_water_level","after":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Observation row offset this page starts at, echoed from the request. Absent when the whole matched series was returned."},"detail":"Field `page_offset` was added to `noaa_marine_get_water_level` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.rows_matched","tool":"noaa_marine_get_water_level","after":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Observation rows the requested date range matched, before the page was cut. Absent when the whole matched series was returned."},"detail":"Field `rows_matched` was added to `noaa_marine_get_water_level` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.rows_returned","tool":"noaa_marine_get_water_level","after":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Observation rows this page carries — the length of observations. Absent when the whole matched series was returned."},"detail":"Field `rows_returned` was added to `noaa_marine_get_water_level` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.truncated","tool":"noaa_marine_get_water_level","after":{"type":"boolean","description":"True when this page stops short of the last matched observation, so further rows remain at next_offset. False on the final page and on a page past the end. Absent when the whole matched series was returned."},"detail":"Field `truncated` was added to `noaa_marine_get_water_level` output.","severity":"risky"}],"published_at":"2026-09-17T20:30:16.943Z"},{"slug":"ZV-2026-1152","server_name":"noaa-marine.caseyjhand.com","severity":"breaking","title":"noaa-marine.caseyjhand.com: Type of latitude on noaa_marine_get_conditions changed number → number|null.","summary":"[risky] Description of noaa_marine_find_stations changed (41% word delta). [risky] Field applied_search was added to noaa_marine_find_stations output. [risky] Field notice was added to noaa_marine_find_stations output. [risky] Field sources was added to noaa_marine_find_stations output. [risky] Description of noaa_marine_get_conditions changed (35% word delta). [risky] Field notice was added to noaa_marine_get_conditions output. [risky] Field waves_observed_at was added to noaa_marine_get_conditions output. [breaking] Type of latitude on noaa_marine_get_conditions changed number → number|null. [breaking] Type of longitude on noaa_marine_get_conditions changed number → number|null. [safe] Description of noaa_marine_get_current_profile changed (5% word delta). [safe] Description of noaa_marine_get_currents changed (8% word delta). [safe] Description of noaa_marine_get_ocean_observations changed (24% word delta). [safe] Description of noaa_marine_get_tide_predictions changed (8% word delta). [risky] Description of noaa_marine_get_water_level changed (38% word delta). [risky] Field notice was added to noaa_marine_get_water_level output. [risky] Field predictions_status was added to noaa_marine_get_water_level output.","changes":[{"kind":"description_changed","tool":"noaa_marine_find_stations","after":"Find CO-OPS tide, water-level and current stations and NDBC buoys near a location, by name, or by station ID, returning a unified list with source, data capabilities, coordinates, and — for NDBC — the physical platform class. This is the required first step for resolving a place name, a coordinate pair, or a bare station number to the station IDs the data tools take: CO-OPS tide and water-level IDs are numeric (e.g. 9447130 for Seattle), CO-OPS current IDs are alphanumeric (e.g. ACT4176), and NDBC buoy IDs are 5-character alphanumeric codes (e.g. 46041). Two axes are reported separately — capabilities and type name the data products a station serves (tide, current, water_level, met, current_profile, water_quality), while platform is the NDBC physical classification (buoy, fixed, oilrig, dart, tao, usv, other) that CO-OPS stations do not carry. Supply latitude and longitude together for a proximity search, or query for a name-or-ID substring matched against both sources, or state for CO-OPS coverage in one state; the filters combine, and results lead with an exact ID match unless a proximity search is ordering them by distance. A search that matches nothing is a success with total_found: 0 carrying an echo of the filters that were applied, and a search whose catalogs did not all answer says which source is missing. Note that CO-OPS current stations are cataloged by monitoring capability rather than prediction availability, so when noaa_marine_get_currents returns no_predictions for one, try the next nearest current station.","before":"Find CO-OPS tide/water-level/current stations and NDBC buoys near a location or by name/state. Returns a unified station list with source, data capabilities, coordinates, and — for NDBC — the physical platform class. This is the required first step to resolve place names or coordinates to station IDs before calling data tools. CO-OPS station IDs are numeric (e.g. 9447130 for Seattle); current station IDs are alphanumeric (e.g. ACT4176). NDBC buoy IDs are 5-character alphanumeric codes (e.g. 46041). Two axes are reported separately: `capabilities`/`type` describe the data products a station serves (tide, current, water_level, met, current_profile), while `platform` is the NDBC physical classification (buoy, fixed, oilrig, dart, tao, usv, other). CO-OPS stations carry no platform class. Provide latitude and longitude together for proximity search, or query/state for name-based search — both may be combined. Note: CO-OPS current stations are cataloged by monitoring capability, not prediction availability. If noaa_marine_get_currents returns no_predictions for a station, try the next nearest current station.","detail":"Description of `noaa_marine_find_stations` changed (41% word delta).","severity":"risky","descriptionDelta":0.41025641025641024},{"kind":"output_property_added","path":"outputSchema.properties.applied_search","tool":"noaa_marine_find_stations","after":{"type":"object","required":["catalogs_read","source"],"properties":{"query":{"type":"string","description":"The name/ID substring as the server used it — trimmed and lowercased. Omitted when no query was supplied or it was blank."},"state":{"type":"string","description":"The state filter applied. Restricts results to CO-OPS and excludes NDBC."},"types":{"type":"array","items":{"type":"string","description":"A requested capability or platform filter value."},"description":"The resolved types filter. Omitted when no types filter narrowed the search."},"center":{"type":"object","required":["latitude","longitude"],"properties":{"latitude":{"type":"number","description":"Center latitude the proximity filter used."},"longitude":{"type":"number","description":"Center longitude the proximity filter used."}},"description":"Proximity-search center, present only when latitude and longitude were supplied.","additionalProperties":false},"source":{"type":"string","description":"The source filter applied: coops, ndbc, or all."},"radius_km":{"type":"number","description":"Radius bound in km, present only when a center was given. Applies whenever a center is present and defaults to 100 km."},"catalogs_read":{"type":"array","items":{"type":"string","description":"Catalog name: coops or ndbc."},"description":"Catalogs this search actually fetched. Empty when source and state cancelled each other out and no catalog was read."},"types_by_source":{"type":"object","required":["coops","ndbc"],"properties":{"ndbc":{"type":"array","items":{"type":"string","description":"NDBC-only filter value."},"description":"Requested values only an NDBC row can carry."},"coops":{"type":"array","items":{"type":"string","description":"CO-OPS-only filter value."},"description":"Requested values only a CO-OPS row can carry."}},"description":"The requested types split by the source that can carry them — every value belongs to exactly one source, so a single-source types filter reduces the search to that source.","additionalProperties":false}},"description":"The narrowing dimensions this search applied, echoed when nothing matched so the caller can see which filter emptied the result.","additionalProperties":false},"detail":"Field `applied_search` was added to `noaa_marine_find_stations` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.notice","tool":"noaa_marine_find_stations","after":{"type":"string","description":"Guidance about the result set: why a search matched nothing, which catalog did not answer, or that the list was capped."},"detail":"Field `notice` was added to `noaa_marine_find_stations` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.sources","tool":"noaa_marine_find_stations","after":{"type":"object","required":["answered","attempted","failed"],"properties":{"failed":{"type":"array","items":{"type":"string","description":"Catalog name: coops or ndbc."},"description":"Catalogs whose fetch rejected. A station served only by one of these is missing."},"answered":{"type":"array","items":{"type":"string","description":"Catalog name: coops or ndbc."},"description":"Catalogs that returned a station list — the results cover these only."},"attempted":{"type":"array","items":{"type":"string","description":"Catalog name: coops or ndbc."},"description":"Catalogs this search needed, after source and state decided which to read."}},"description":"Which station catalogs were attempted, answered, and failed. Present only when a catalog fetch rejected, so a partial result set is never read as a complete one.","additionalProperties":false},"detail":"Field `sources` was added to `noaa_marine_find_stations` output.","severity":"risky"},{"kind":"description_changed","tool":"noaa_marine_get_conditions","after":"Live marine conditions from an NDBC buoy: wave height, period and direction, wind speed, gust and direction, sea-surface temperature, air temperature, barometric pressure, and dew point. All values are SI units — wind in m/s, wave height in m, pressure in hPa, temperatures in °C — except TIDE, which is in feet, and VIS, in nautical miles, both rarely populated at offshore buoys; a numeric field is null when the buoy sensor did not report a value, which is normal offshore. Row cadence varies by station from 5 to 60 minutes, so observed_at can be that old, and NDBC writes each block of columns on its own cycle, so any block can resolve from an earlier row within 90 minutes of observed_at. Waves carry their own waves_observed_at, null when no wave sample falls inside that window, and any other block read from an earlier row is named with its measurement time in the response notice. Use noaa_marine_find_stations with source=\"ndbc\" and types=[\"met\"] to find station IDs near a location, since met-flagged stations are the ones most likely to serve live conditions: roughly a third of active NDBC stations report neither meteorological nor current data, most of those have no observation file, and omitting the types filter surfaces station IDs this tool cannot read.","before":"Live marine conditions from an NDBC buoy: wave height/period/direction, wind speed/gust/direction, sea-surface temperature, air temperature, barometric pressure, and dew point. All values are SI units — wind in m/s, wave height in m, pressure in hPa, temperatures in °C. Exceptions: TIDE is in feet and VIS is in nautical miles (rarely populated at offshore buoys). Numeric fields are null when the buoy sensor did not report a value — this is normal for offshore buoys. Observations are updated approximately every 10 minutes; data may be 10–20 minutes old. Use noaa_marine_find_stations with source=\"ndbc\" and types=[\"met\"] to find station IDs near a location — met-flagged stations are the ones most likely to serve live conditions. Roughly a third of active NDBC stations report neither meteorological nor current data, and most of those have no observation file, so omitting the types filter will surface station IDs this tool cannot read.","detail":"Description of `noaa_marine_get_conditions` changed (35% word delta).","severity":"risky","descriptionDelta":0.3509933774834437},{"kind":"output_property_added","path":"outputSchema.properties.notice","tool":"noaa_marine_get_conditions","after":{"type":"string","description":"Present when a sensor block other than waves was read from a row older than observed_at, naming each such block, the output fields it fills, and the time those values were measured. Absent when every block outside the wave columns came from the newest row."},"detail":"Field `notice` was added to `noaa_marine_get_conditions` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.waves_observed_at","tool":"noaa_marine_get_conditions","after":{"type":["string","null"],"description":"ISO 8601 UTC timestamp of the row the four wave fields were read from. NDBC runs its wave pass on a slower cycle than the met row, so this can be older than observed_at; it applies to all four wave fields, which are never sampled apart. Null when no wave sample falls inside the 90-minute look-back window, including when the buoy has no wave sensor."},"detail":"Field `waves_observed_at` was added to `noaa_marine_get_conditions` output.","severity":"risky"},{"kind":"output_type_changed","path":"outputSchema.properties.latitude","tool":"noaa_marine_get_conditions","after":"number|null","before":"number","detail":"Type of `latitude` on `noaa_marine_get_conditions` changed number → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.longitude","tool":"noaa_marine_get_conditions","after":"number|null","before":"number","detail":"Type of `longitude` on `noaa_marine_get_conditions` changed number → number|null.","severity":"breaking"},{"kind":"description_changed","tool":"noaa_marine_get_current_profile","after":"Observed ocean-current depth profile from an NDBC ADCP buoy — the most recent measurement of current speed and direction at each depth bin, returning depth in meters, direction in degrees true (the direction the current flows toward), and speed in cm/s. It is distinct from noaa_marine_get_currents, which returns CO-OPS tidal-current predictions of max flood, ebb and slack rather than these observed acoustic-Doppler measurements. A depth bin is reported whenever NDBC gives it a depth, and its direction or speed is null when the sensor did not report that component. Use noaa_marine_find_stations with source=\"ndbc\" and types=[\"current_profile\"] to find station IDs, since most NDBC stations serve no ADCP profile and an unfiltered search returns IDs this tool cannot read.","before":"Observed ocean-current depth profile from an NDBC ADCP buoy: the most recent measurement of current speed and direction at each depth bin. Returns depth in meters, direction in degrees true (the direction the current flows toward), and speed in cm/s. Distinct from noaa_marine_get_currents, which returns CO-OPS tidal-current predictions (forecast max flood/ebb/slack) rather than these observed acoustic-Doppler measurements. A depth bin is reported whenever NDBC gives it a depth; its direction or speed is null when the sensor did not report that component. Use noaa_marine_find_stations with source=\"ndbc\" and types=[\"current_profile\"] to find station IDs — most NDBC stations serve no ADCP profile, so an unfiltered search returns IDs this tool cannot read.","detail":"Description of `noaa_marine_get_current_profile` changed (5% word delta).","severity":"safe","descriptionDelta":0.046511627906976716},{"kind":"description_changed","tool":"noaa_marine_get_currents","after":"Tidal current predictions for a CO-OPS current station: max flood and ebb speeds, slack times, and directions. These are forecast predictions from CO-OPS, distinct from noaa_marine_get_current_profile, which returns NDBC observed ocean-current measurements binned by depth. The default MAX_SLACK interval is the practical planning view, showing when currents peak and when slack water occurs, and a 6-minute interval returns the continuous curve for detailed analysis. Current station IDs are alphanumeric (e.g. ACT4176), distinct from the numeric tide and water-level IDs, and the date range is limited to 1 year per request — use noaa_marine_find_stations with types=[\"current\"] to obtain a valid current station ID.","before":"Tidal current predictions for a CO-OPS current station: max flood/ebb speeds, slack times, and directions. These are forecast tidal-current predictions from CO-OPS — distinct from noaa_marine_get_current_profile, which returns NDBC observed ocean-current measurements binned by depth. Defaults to MAX_SLACK interval — the practical planning view showing when currents peak and when slack water occurs. Optionally returns 6-minute continuous predictions for detailed analysis. Current station IDs use alphanumeric format (e.g. ACT4176), distinct from numeric tide/water-level IDs. Date range is limited to 1 year per request. Use noaa_marine_find_stations with types=[\"current\"] to obtain valid current station IDs.","detail":"Description of `noaa_marine_get_currents` changed (8% word delta).","severity":"safe","descriptionDelta":0.07792207792207795},{"kind":"description_changed","tool":"noaa_marine_get_ocean_observations","after":"Live sub-surface oceanographic observations from an NDBC station's water-quality sensors: at each reported depth, water temperature, conductivity, salinity, dissolved oxygen as both saturation percent and concentration in ppm, chlorophyll, turbidity, pH, and redox potential. This is the water-column counterpart to noaa_marine_get_conditions, which returns surface meteorological and wave data — use this tool for what the water is doing below the surface, that one for weather and sea state at the buoy. It returns the most recent observation as one reading per reported depth, and most stations report a single depth while some report several at the same time; sensor coverage is sparse, most stations populating only water temperature and salinity, and any value the station did not report comes back null rather than a fabricated zero, as do latitude and longitude for a station absent from the NDBC active-stations list. Sub-surface sensors are on only a subset of NDBC stations, so find one with noaa_marine_find_stations using source=\"ndbc\" and types=[\"water_quality\"], which filters on NDBC's own water-quality catalog flag — the flag and actual .ocean availability drift, so this tool reads any station that serves the file and returns observations_not_found for one that does not.","before":"Live sub-surface oceanographic observations from an NDBC station's water-quality sensors: at each reported depth, water temperature, conductivity, salinity, dissolved oxygen (both saturation percent and concentration in ppm), chlorophyll, turbidity, pH, and redox potential. This is the water-column counterpart to noaa_marine_get_conditions, which returns surface meteorological and wave data (wind, waves, sea-surface temperature) — use this tool for what the water is doing below the surface, that one for weather and sea state at the buoy. Returns the most recent observation as one reading per reported depth; most stations report a single depth, but some report several at the same time. Sensor coverage is sparse — most stations populate only water temperature and salinity — and any value the station did not report comes back null rather than a fabricated zero. Latitude and longitude are null when the station is absent from the NDBC active-stations list. Sub-surface sensors are on only a subset of NDBC stations and are not marked by any station-catalog flag, so no capability filter guarantees coverage: call this on candidate NDBC station IDs from noaa_marine_find_stations with source=\"ndbc\", and expect the observations_not_found error on the many stations that serve no .ocean file.","detail":"Description of `noaa_marine_get_ocean_observations` changed (24% word delta).","severity":"safe","descriptionDelta":0.24460431654676262},{"kind":"description_changed","tool":"noaa_marine_get_tide_predictions","after":"High and low tide predictions for a CO-OPS tide station over a date range. The default hilo interval returns the time, height, and tide type (H for high, L for low) of each event, while the 6-minute interval returns the detailed tide curve. Datum defaults to MLLW, mean lower low water, the standard for US nautical charts, and the date range is limited to 1 year per request, so split longer ranges across multiple calls — use noaa_marine_find_stations first to resolve a station name or location to a numeric station ID.","before":"High/low tide predictions for a CO-OPS tide station over a date range. Returns time, height, and tide type (H=high, L=low) for each event when using the default hilo interval, or 6-minute interval predictions for a detailed tide curve. Datum defaults to MLLW (mean lower low water — standard for US nautical charts). Date range is limited to 1 year per request; split longer ranges across multiple calls. Use noaa_marine_find_stations first to resolve a station name or location to a numeric station ID.","detail":"Description of `noaa_marine_get_tide_predictions` changed (8% word delta).","severity":"safe","descriptionDelta":0.0757575757575758},{"kind":"description_changed","tool":"noaa_marine_get_water_level","after":"Observed water level, real-time or historical, for a CO-OPS water-level station, paired with 6-minute tide predictions for the same period so the residual (observed − predicted) shows storm surge when positive and anomalous drawdown when negative. Observations and predictions are fetched independently, so when the prediction series is empty, predictions_status says whether CO-OPS has none for this station and range or the prediction fetch failed — the observed series returns either way, and residual_summary is present only when both series are. Date range is limited to 31 days per request, so split longer ranges into multiple calls, and use noaa_marine_find_stations first to resolve a station name or location to a valid station ID.","before":"Observed water level (real-time or historical) for a CO-OPS water-level station, with paired predictions for comparison. The difference (residual = observed − predicted) indicates storm surge (positive) or anomalous drawdown (negative). Returns 6-minute observations alongside 6-minute predictions. Date range is limited to 31 days per request; split longer ranges into multiple calls. Use noaa_marine_find_stations first to resolve a station name or location to a valid station ID.","detail":"Description of `noaa_marine_get_water_level` changed (38% word delta).","severity":"risky","descriptionDelta":0.3780487804878049},{"kind":"output_property_added","path":"outputSchema.properties.notice","tool":"noaa_marine_get_water_level","after":{"type":"string","description":"Why the paired prediction series is missing, when it is missing."},"detail":"Field `notice` was added to `noaa_marine_get_water_level` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.predictions_status","tool":"noaa_marine_get_water_level","after":{"enum":["empty","unavailable"],"type":"string","description":"Present only when predictions is empty. \"empty\" means CO-OPS returned no prediction rows for this station and date range; \"unavailable\" means the prediction fetch failed, so no comparison series could be retrieved and the absence says nothing about the station. Absent when predictions were returned."},"detail":"Field `predictions_status` was added to `noaa_marine_get_water_level` output.","severity":"risky"}],"published_at":"2026-09-17T18:01:18.373Z"},{"slug":"ZV-2026-1110","server_name":"noaa-marine.caseyjhand.com","severity":"breaking","title":"noaa-marine.caseyjhand.com: Type of tide_ft on noaa_marine_get_conditions changed unset → number|null.","summary":"[breaking] Type of tide_ft on noaa_marine_get_conditions changed unset → number|null. [breaking] Type of air_temp_c on noaa_marine_get_conditions changed unset → number|null. [breaking] Type of dew_point_c on noaa_marine_get_conditions changed unset → number|null. [breaking] Type of pressure_hpa on noaa_marine_get_conditions changed unset → number|null. [breaking] Type of water_temp_c on noaa_marine_get_conditions changed unset → number|null. [breaking] Type of gust_speed_ms on noaa_marine_get_conditions changed unset → number|null. [breaking] Type of wave_height_m on noaa_marine_get_conditions changed unset → number|null. [breaking] Type of wind_speed_ms on noaa_marine_get_conditions changed unset → number|null. [breaking] Type of visibility_nmi on noaa_marine_get_conditions changed unset → number|null. [breaking] Type of average_period_sec on noaa_marine_get_conditions changed unset → number|null. [breaking] Type of wind_direction_deg on noaa_marine_get_conditions changed unset → number|null. [breaking] Type of dominant_period_sec on noaa_marine_get_conditions changed unset → number|null. [breaking] Type of mean_wave_direction_deg on noaa_marine_get_conditions changed unset → number|null. [breaking] Type of latitude on noaa_marine_get_current_profile changed unset → number|null. [breaking] Type of longitude on noaa_marine_get_current_profile changed unset → number|null. [breaking] Type of latitude on noaa_marine_get_ocean_observations changed unset → number|null. [breaking] Type of longitude on noaa_marine_get_ocean_observations changed unset → number|null.","changes":[{"kind":"output_type_changed","path":"outputSchema.properties.tide_ft","tool":"noaa_marine_get_conditions","after":"number|null","before":"unset","detail":"Type of `tide_ft` on `noaa_marine_get_conditions` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.air_temp_c","tool":"noaa_marine_get_conditions","after":"number|null","before":"unset","detail":"Type of `air_temp_c` on `noaa_marine_get_conditions` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.dew_point_c","tool":"noaa_marine_get_conditions","after":"number|null","before":"unset","detail":"Type of `dew_point_c` on `noaa_marine_get_conditions` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.pressure_hpa","tool":"noaa_marine_get_conditions","after":"number|null","before":"unset","detail":"Type of `pressure_hpa` on `noaa_marine_get_conditions` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.water_temp_c","tool":"noaa_marine_get_conditions","after":"number|null","before":"unset","detail":"Type of `water_temp_c` on `noaa_marine_get_conditions` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.gust_speed_ms","tool":"noaa_marine_get_conditions","after":"number|null","before":"unset","detail":"Type of `gust_speed_ms` on `noaa_marine_get_conditions` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.wave_height_m","tool":"noaa_marine_get_conditions","after":"number|null","before":"unset","detail":"Type of `wave_height_m` on `noaa_marine_get_conditions` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.wind_speed_ms","tool":"noaa_marine_get_conditions","after":"number|null","before":"unset","detail":"Type of `wind_speed_ms` on `noaa_marine_get_conditions` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.visibility_nmi","tool":"noaa_marine_get_conditions","after":"number|null","before":"unset","detail":"Type of `visibility_nmi` on `noaa_marine_get_conditions` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.average_period_sec","tool":"noaa_marine_get_conditions","after":"number|null","before":"unset","detail":"Type of `average_period_sec` on `noaa_marine_get_conditions` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.wind_direction_deg","tool":"noaa_marine_get_conditions","after":"number|null","before":"unset","detail":"Type of `wind_direction_deg` on `noaa_marine_get_conditions` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.dominant_period_sec","tool":"noaa_marine_get_conditions","after":"number|null","before":"unset","detail":"Type of `dominant_period_sec` on `noaa_marine_get_conditions` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.mean_wave_direction_deg","tool":"noaa_marine_get_conditions","after":"number|null","before":"unset","detail":"Type of `mean_wave_direction_deg` on `noaa_marine_get_conditions` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.latitude","tool":"noaa_marine_get_current_profile","after":"number|null","before":"unset","detail":"Type of `latitude` on `noaa_marine_get_current_profile` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.longitude","tool":"noaa_marine_get_current_profile","after":"number|null","before":"unset","detail":"Type of `longitude` on `noaa_marine_get_current_profile` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.latitude","tool":"noaa_marine_get_ocean_observations","after":"number|null","before":"unset","detail":"Type of `latitude` on `noaa_marine_get_ocean_observations` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.longitude","tool":"noaa_marine_get_ocean_observations","after":"number|null","before":"unset","detail":"Type of `longitude` on `noaa_marine_get_ocean_observations` changed unset → number|null.","severity":"breaking"}],"published_at":"2026-09-16T11:36:11.982Z"}]