{"schema_version":"1.1","purpose":"Discovery document for AI clients; raw observations and forecasts remain primary, server analysis is auxiliary","location":{"slug":"glenlea","name":"Glenlea Astronomical Observatory","latitude":49.645278,"longitude":-97.121389,"elevation_m":231.0,"timezone":"America/Winnipeg","coordinate_source":"Minor Planet Center observatory code 729; latitude cross-checked against published observatory listing"},"generated_at":"2026-09-04T03:16:15.326791Z","data_status":"complete","cache_only":true,"endpoints":{"human_html":"/astro/glenlea","forecast_verification_html":"/astro/glenlea/verification","tonight_full_hourly":"/api/v1/astro/glenlea/tonight","all_hours_paginated":"/api/v1/astro/glenlea/hours?offset=0&limit=48","full_snapshot":"/api/v1/astro/glenlea","compact_server_analysis":"/api/v1/astro/glenlea/summary","future_nights":"/api/v1/astro/glenlea/nights?count=7","target_catalog":"/api/v1/astro/glenlea/targets","target_example_m31":"/api/v1/astro/glenlea/targets/m31","forecast_verification_summary":"/api/v1/astro/glenlea/verification","model_performance_by_lead_time":"/api/v1/astro/glenlea/verification/models","forecast_evolution_example":"/api/v1/astro/glenlea/verification/evolution?valid_time=ISO_8601_UTC","ground_truth_observations":"/api/v1/astro/glenlea/verification/observations","mcp_public_read_only":"/mcp-public","mcp_bearer_protected":"/mcp"},"freshness":{"snapshot_generated_at":"2026-09-04T03:16:15.326791Z","astrospheric_model_time":"2026090318","astrospheric_forecast_time":"2026090319","astrospheric_fetched_at":"2026-09-04T03:16:15.322846Z","independent_models_fetched_at":"2026-09-04T03:16:13.208165Z","smoke_proxy_fetched_at":"2026-09-04T03:16:12.894719Z","eccc_observed_at":"2026-09-04T03:00:00Z","eccc_hourly_updated_at":"2026-09-04T03:01:24Z","source_coverage":{"astrospheric":{"available_from":"2026-09-03T21:00:00Z","available_through":"2026-09-07T06:00:00Z","variables":{"Cloud":{"available_from":"2026-09-03T21:00:00Z","available_through":"2026-09-07T06:00:00Z"},"Transparency":{"available_from":"2026-09-03T21:00:00Z","available_through":"2026-09-07T06:00:00Z"},"Seeing":{"available_from":"2026-09-03T21:00:00Z","available_through":"2026-09-07T06:00:00Z"},"Temperature":{"available_from":"2026-09-03T21:00:00Z","available_through":"2026-09-07T06:00:00Z"},"DewPoint":{"available_from":"2026-09-03T21:00:00Z","available_through":"2026-09-07T06:00:00Z"},"WindDirection":{"available_from":"2026-09-03T21:00:00Z","available_through":"2026-09-07T06:00:00Z"},"Wind":{"available_from":"2026-09-03T21:00:00Z","available_through":"2026-09-07T06:00:00Z"}}},"independent_models":{"GFS":{"available_from":"2026-09-04T00:00:00Z","available_through":"2026-09-10T23:00:00Z"},"HRDPS":{"available_from":"2026-09-04T00:00:00Z","available_through":"2026-09-05T18:00:00Z"},"ICON":{"available_from":"2026-09-04T00:00:00Z","available_through":"2026-09-10T23:00:00Z"},"NBM":{"available_from":"2026-09-04T00:00:00Z","available_through":"2026-09-10T23:00:00Z"},"RDPS":{"available_from":"2026-09-04T00:00:00Z","available_through":"2026-09-07T06:00:00Z"}},"air_quality":{"available_from":"2026-09-04T00:00:00Z","available_through":"2026-09-08T23:00:00Z"},"eccc_hourly":{"available_from":"2026-09-04T04:00:00Z","available_through":"2026-09-05T03:00:00Z"}}},"coverage":{"hour_count":166,"complete_astrospheric_hour_count":77,"first_hour_utc":"2026-09-04T02:00:00Z","last_hour_utc":"2026-09-10T23:00:00Z","night_count":8,"retained_forecast_history_hour_count":22,"forecast_history_retention_hours":24},"sources":{"astrospheric":{"provider":"Astrospheric Data API v2","fields":"Cloud, Transparency, Seeing, Temperature, DewPoint, WindDirection, Wind","note":"Official Astrospheric values. Individual Pro Cloud Ensemble members are not exposed by this API."},"independent_models":{"provider":"Open-Meteo model endpoints","fields":"RDPS, HRDPS, GFS, ICON and NBM cloud, temperature, dew point, humidity, precipitation and wind","note":"Independent model data; not the Astrospheric Pro Cloud Ensemble."},"eccc_current":{"provider":"Environment and Climate Change Canada SWOB","fields":"nearest recent weather-station observation plus separately selected nearby aviation cloud observation","note":"Every observation retains station time, age, distance and quality. Layer cloud codes are converted with the documented ECCC code-table midpoint and are labeled as an estimate, not a Glenlea sensor."},"eccc_hourly":{"provider":"Environment and Climate Change Canada City Page Weather","fields":"condition, precipitation probability, temperature and wind","note":"Official experimental Winnipeg city forecast used only as a short-range cross-check."},"smoke_proxy":{"provider":"CAMS Global via Open-Meteo","fields":"PM2.5 and aerosol optical depth","note":"Coarse atmospheric guidance, not local smoke detection."},"astronomy":{"provider":"Astronomy Engine and Astral","fields":"Moon phase/position, Sun altitude, rise/set and twilight","note":"Computed for the configured Glenlea coordinates."}},"data_dictionary":{"cloud_percent":{"unit":"%","meaning":"total cloud cover; lower is better"},"transparency_index":{"unit":"Astrospheric index","meaning":"atmospheric transparency index; lower is better"},"seeing_index":{"unit":"Astrospheric 1-5","meaning":"seeing quality; higher is better"},"temperature_c":{"unit":"degC","meaning":"air temperature"},"dew_point_c":{"unit":"degC","meaning":"dew point"},"dew_point_spread_c":{"unit":"degC","meaning":"temperature minus dew point; smaller means higher condensation risk"},"humidity_percent":{"unit":"%","meaning":"relative humidity"},"wind_speed_kmh":{"unit":"km/h","meaning":"sustained wind speed"},"wind_direction_degrees":{"unit":"degrees true","meaning":"meteorological wind direction"},"wind_gust_kmh":{"unit":"km/h","meaning":"wind gust speed"},"precipitation_probability_percent":{"unit":"%","meaning":"maximum available hourly precipitation probability"},"moon.illumination_percent":{"unit":"%","meaning":"illuminated lunar disk"},"moon.altitude_degrees":{"unit":"degrees","meaning":"Moon altitude above the geometric horizon"},"moon.azimuth_degrees":{"unit":"degrees","meaning":"Moon azimuth clockwise from north"},"sun_altitude_degrees":{"unit":"degrees","meaning":"Sun altitude; astronomical darkness begins at -18 degrees"},"sky_timeline.samples":{"unit":"15-minute local-time samples","meaning":"computed Sun altitude and Moon altitude/azimuth/illumination from 18:00 through 08:00"},"smoke_proxy.pm2_5_ug_m3":{"unit":"ug/m3","meaning":"coarse CAMS PM2.5 smoke/haze proxy"},"smoke_proxy.aerosol_optical_depth":{"unit":"dimensionless","meaning":"coarse CAMS aerosol optical depth"},"model_agreement.score":{"unit":"0-1","meaning":"agreement derived from independent model cloud spread"},"component_scores":{"unit":"0-10","meaning":"server-computed auxiliary deep-sky component scores"},"overall_score":{"unit":"0-10","meaning":"server-computed auxiliary deep-sky score"},"scoring_v2.condition_score_0_to_10":{"unit":"0-10","meaning":"V2 physical weather quality before confidence; requires all physical components"},"scoring_v2.final_imaging_score_0_to_10":{"unit":"0-10","meaning":"V2 condition score after bounded cloud-model and aerosol risk adjustments plus hard safety caps"},"scoring_v2.forecast_confidence.score_0_to_1":{"unit":"0-1","meaning":"V2 confidence from weighted model agreement, Astrospheric alignment, freshness, coverage and horizon cap"},"scoring_v2.weighted_model_agreement":{"unit":"mixed","meaning":"weighted median, weighted MAD, range, outliers and active model priors for cloud"},"hour_history":{"unit":"hourly rows","meaning":"at most 24 hours of cached prior forecast rows; these are not observations or measured historical weather"},"target.altitude_degrees":{"unit":"degrees","meaning":"target altitude above horizon"},"target.azimuth_degrees":{"unit":"degrees","meaning":"target azimuth clockwise from north"}},"analysis":{"role":"auxiliary; AI clients should inspect raw hourly values and model disagreement before accepting a verdict","deep_sky_weights":{"cloud":0.32,"transparency":0.22,"moonlight":0.13,"darkness":0.1,"wind":0.08,"dew_risk":0.07,"forecast_confidence":0.06,"seeing":0.02},"continuous_windows":true,"seeing_is_low_weight":true,"scoring_version":"2.0","scoring_v2":{"version":"2.0","mode":"deep_sky_astrophotography","condition_weights":{"cloud":0.35,"transparency":0.25,"wind":0.1,"dew_risk":0.09,"darkness":0.09,"moonlight":0.08,"seeing":0.04},"forecast_confidence_weights":{"independent_model_agreement":0.45,"astrospheric_alignment":0.25,"freshness":0.15,"coverage":0.15},"model_prior_weights":{"0_48h":{"HRDPS":0.24,"RDPS":0.16,"ICON":0.25,"GFS":0.2,"NBM":0.15},"48_84h":{"RDPS":0.35,"ICON":0.25,"GFS":0.25,"NBM":0.15},"84_168h":{"RDPS":0.2,"ICON":0.35,"GFS":0.45}},"forecast_horizon_caps":[{"through_hours":24,"maximum_confidence":1.0},{"through_hours":48,"maximum_confidence":0.92},{"through_hours":84,"maximum_confidence":0.82},{"through_hours":120,"maximum_confidence":0.65},{"through_hours":168,"maximum_confidence":0.5}],"missing_data_policy":"Missing values remain null. A complete V2 condition score requires all seven physical components; precipitation and at least two active models are additionally required for a decision-grade hour.","freshness":{"score_0_to_1":0.966,"astrospheric_model_run":"2026-09-03T18:00:00Z","astrospheric_model_run_age_hours":9.3,"independent_models_fetched_at":"2026-09-04T03:16:13.208165Z","independent_models_fetch_age_hours":0.0,"independent_model_initialization_time":null,"independent_model_initialization_note":"Not supplied by the current Open-Meteo response; fetched time is not presented as model initialization time."}},"v1_fields_preserved":true,"local_calibration":{"mode":"shadow","active_in_production":false,"purpose":"Preserve forecasts at issue time, verify later against source-graded observations, and publish evidence without changing V2 automatically."}},"missing_data_policy":"Missing source values are null. They are not guessed. Aggregated fallback fields identify their source in field_sources.","forecast_history_policy":{"retention_hours":24,"semantics":"Cached prior forecast rows only; not observations or measured historical weather.","older_rows_removed":true},"limitations":["Astrospheric v2 exposes Cloud, Transparency, Seeing, Temperature, DewPoint, WindDirection and Wind; it does not expose individual Pro Cloud Ensemble members.","RDPS, HRDPS, GFS, ICON and NBM comparison is independently sourced through Open-Meteo and may differ from the Astrospheric app's Pro ensemble processing.","CAMS aerosol data is a coarse smoke/haze proxy, not local satellite cloud-motion analysis.","ECCC City Page Weather is an official but experimental city forecast for Winnipeg; it is a short-range cross-check, not a Glenlea cloud-percentage model.","The final decision remains forecast guidance; verify the sky and road/site access before travel."]}