{
  "schemaVersion": 1,
  "toolVersion": "field-lab/1",
  "ingest": {
    "method": "POST",
    "path": "/api/v1/research/ingest",
    "auth": "Existing scoped editorial publisher plus Sites dispatch authorization. No credentials in the model input.",
    "idempotencyKey": "dataset:sha256 of original UTF8 source bytes",
    "envelope": {
      "schemaVersion": 1,
      "dataset": "nasa-power-prague | gfz-space | nasa-donki | noaa-solar",
      "source": {
        "url": "approved original source URL",
        "retrievedAt": "UTC ISO8601",
        "sha256": "lowercase SHA256 of originalText UTF8"
      },
      "originalText": "unmodified original source response as UTF8 text"
    },
    "maxEnvelopeBytes": 900000,
    "maxOriginalBytes": {
      "nasa-power-prague": 200000,
      "gfz-space": 200000,
      "nasa-donki": 200000,
      "noaa-solar": 600000
    },
    "acknowledgement": [
      "schemaVersion",
      "dataset",
      "sourceSha256",
      "inserted",
      "filled",
      "conflicts",
      "replayed",
      "latestDay",
      "partialDays"
    ],
    "retention": "First non-null values stay authoritative. Missing slots may fill with compare-and-swap and a source-vintage ingest record. Source revisions are counted as conflicts, never silently replacing measurements."
  },
  "read": {
    "method": "GET",
    "path": "/api/v1/research/field?symbol=ID",
    "response": "definition, latest, points including null gaps, features, source hashes, ingest provenance"
  },
  "datasets": {
    "nasa-power-prague": {
      "url": "https://power.larc.nasa.gov/api/temporal/daily/point",
      "query": {
        "community": "AG",
        "time-standard": "UTC",
        "latitude": 50.08,
        "longitude": 14.42,
        "parameters": "T2M,T2M_MAX,T2M_MIN,T2MDEW,RH2M,WS2M,PRECTOTCORR,ALLSKY_SFC_SW_DWN",
        "format": "JSON"
      },
      "units": [
        "C",
        "C",
        "C",
        "C",
        "%",
        "m/s",
        "mm/day",
        "MJ/m^2/day"
      ],
      "lookbackDays": 120,
      "minimumHoursBetweenAttempts": 8,
      "missing": "-999 converts to null; partial rows retained; each proxy requires its own compatible inputs."
    },
    "gfz-space": {
      "urls": [
        "https://kp.gfz.de/fileadmin/files_for_gfz_cms/Kp_ap_Ap_SN_F107_nowcast.txt",
        "https://kp.gfz.de/app/files/Kp_ap_Ap_SN_F107_nowcast.txt"
      ],
      "columns": "Kp columns7\u201314 zero-based; Ap23; F10.7obs25; definitive flag27",
      "cadenceHours": 8,
      "license": "CC BY 4.0; exclude SILSO SN (column24), which has a noncommercial license"
    },
    "nasa-donki": {
      "url": "https://ccmc.gsfc.nasa.gov/DONKI-API/get/FLR",
      "query": "startDate and endDate: completed UTC dates, at most32days; suggest last30days ending yesterday",
      "cadenceHours": 8,
      "meaning": "Reported catalog events; empty days mean no catalog report, not no physical flare. Class weights A=.01,B=.1,C=1,M=10,X=100 times numeric multiplier, not energy."
    },
    "noaa-solar": {
      "url": "https://services.swpc.noaa.gov/json/solar-cycle/observed-solar-cycle-indices.json",
      "cadenceHours": 24,
      "fields": [
        "time-tag",
        "observed_swpc_ssn",
        "f10.7"
      ],
      "exclude": [
        "ssn",
        "smoothed_ssn",
        "smoothed_swpc_ssn",
        "smoothed_f10.7"
      ],
      "meaning": "NOAA own observed monthly count; monthly solar radio flux. Completed months only."
    },
    "regional-weather": {
      "datasets": [
        "nasa-power-bohemian-forest",
        "nasa-power-alps",
        "nasa-power-po-lowlands"
      ],
      "sourceTemplate": "Same NASA POWER daily point request with the exact latitude/longitude from regions.",
      "units": "Same eight AG/UTC parameters; no mixing regions.",
      "cadence": "8 hours; completed UTC days; first non-null vintage preserved.",
      "purpose": "Field Lab comparison only; primary game quotes remain Prague-anchored."
    }
  },
  "pairs": [
    {
      "id": "CLOUD-SUN",
      "symbol": "CLOUD SHADOW / SUNBEAM",
      "name": "Cloud Shadow / Sunbeam",
      "group": "Sky",
      "a": "shade",
      "b": "solar",
      "scaleA": 0.5,
      "scaleB": 15,
      "meaning": "Cloud shadow is inferred from shortwave transmission against a simple clear-sky estimate. It is not a satellite cloud mask.",
      "joke": "The cloud has acquired a controlling stake in lunchtime.",
      "source": "https://power.larc.nasa.gov/docs/services/api/temporal/daily/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + shade / 0.5) \u00f7 (1 + solar / 15)",
      "color": "#bbd49b",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 25,
      "selected": true
    },
    {
      "id": "DEW-DUST",
      "symbol": "DEW / DUST DANCE",
      "name": "Dew / Dust Dance",
      "group": "Ground",
      "a": "dewPotential",
      "b": "dustLift",
      "scaleA": 1,
      "scaleB": 8,
      "meaning": "Near-saturation cooling potential versus dry-wind transport potential. Neither dew mass nor airborne dust is measured.",
      "joke": "The dust desk has been placed on a damp performance plan.",
      "source": "https://weather.metoffice.gov.uk/learn-about/weather/types-of-weather/temperature/dew",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + dewPotential / 1) \u00f7 (1 + dustLift / 8)",
      "color": "#8fbcda",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 24,
      "selected": true
    },
    {
      "id": "FOG-HORIZON",
      "symbol": "FOG / FARAWAY",
      "name": "Fog / Faraway",
      "group": "Sky",
      "a": "fogPotential",
      "b": "mixing",
      "scaleA": 1,
      "scaleB": 5,
      "meaning": "A small minimum-temperature-to-mean-dew-point gap and light wind versus ventilation. Daily data cannot establish actual visibility.",
      "joke": "Faraway has temporarily become next-door.",
      "source": "https://weather.metoffice.gov.uk/learn-about/weather/types-of-weather/temperature/dew",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + fogPotential / 1) \u00f7 (1 + mixing / 5)",
      "color": "#c3a6df",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 23,
      "selected": true
    },
    {
      "id": "FOREST-THIRST",
      "symbol": "FOREST THIRST / RAIN RELIEF",
      "name": "Forest Thirst / Rain Relief",
      "group": "Ecology",
      "a": "vpd",
      "b": "rain7",
      "scaleA": 1,
      "scaleB": 20,
      "meaning": "Vapour-pressure deficit is atmospheric drying pressure; seven-day precipitation is supply. Neither is measured tree stress or soil moisture.",
      "joke": "The forest has requested a refill, no ice.",
      "source": "https://power.larc.nasa.gov/docs/services/api/temporal/daily/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + vpd / 1) \u00f7 (1 + rain7 / 20)",
      "color": "#e1c386",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 22,
      "selected": true
    },
    {
      "id": "MUSHROOM-PATIENCE",
      "symbol": "MUSHROOM MOOD / PATIENCE",
      "name": "Mushroom Mood / Patience",
      "group": "Ecology",
      "a": "mushroom",
      "b": "dryDays",
      "scaleA": 1,
      "scaleB": 10,
      "meaning": "Warmth suitability multiplied by seven-day rain versus elapsed dry days. This original screen cannot predict species, yield or safe foraging.",
      "joke": "The mycelium is still reviewing your application.",
      "source": "https://power.larc.nasa.gov/docs/services/api/temporal/daily/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + mushroom / 1) \u00f7 (1 + dryDays / 10)",
      "color": "#bbd49b",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 25,
      "selected": true
    },
    {
      "id": "PETRICHOR-DROUGHT",
      "symbol": "PETRICHOR / WAITING",
      "name": "Petrichor / Waiting",
      "group": "Ground",
      "a": "firstRain",
      "b": "dryDays",
      "scaleA": 5,
      "scaleB": 10,
      "meaning": "Rain following a dry spell versus dry-spell length. A smell-opportunity proxy, not a measurement of geosmin or perceived scent.",
      "joke": "Rain has released its long-awaited fragrance.",
      "source": "https://power.larc.nasa.gov/docs/services/api/temporal/daily/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + firstRain / 5) \u00f7 (1 + dryDays / 10)",
      "color": "#8fbcda",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 24,
      "selected": true
    },
    {
      "id": "BEE-BREEZE",
      "symbol": "BEE OFFICE / BREEZE",
      "name": "Bee Office / Breeze",
      "group": "Ecology",
      "a": "flight",
      "b": "wind",
      "scaleA": 1,
      "scaleB": 4,
      "meaning": "A declared warm, low-rain, low-wind screen versus daily mean two-metre wind. No bee counts or species-specific flight prediction.",
      "joke": "The bee office is open. HR is still a flower.",
      "source": "https://power.larc.nasa.gov/docs/services/api/temporal/daily/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + flight / 1) \u00f7 (1 + wind / 4)",
      "color": "#c3a6df",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 23,
      "selected": true
    },
    {
      "id": "FROG-CRICKET",
      "symbol": "FROG CHOIR / CRICKET CLUB",
      "name": "Frog Choir / Cricket Club",
      "group": "Ecology",
      "a": "frog",
      "b": "cricket",
      "scaleA": 1,
      "scaleB": 1,
      "meaning": "Wet-warm conditions versus dry-warm conditions. Habitat screens only; no microphone, population estimate or call counts.",
      "joke": "Two choirs. Neither has passed the sound check.",
      "source": "https://power.larc.nasa.gov/docs/services/api/temporal/daily/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + frog / 1) \u00f7 (1 + cricket / 1)",
      "color": "#e1c386",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 22,
      "selected": true
    },
    {
      "id": "FIREFLY-MOON",
      "symbol": "FIREFLY WEATHER / MOONLIGHT",
      "name": "Firefly Weather / Moonlight",
      "group": "Ecology",
      "a": "firefly",
      "b": "moonlight",
      "scaleA": 1,
      "scaleB": 1,
      "meaning": "A warm, humid dark-window screen versus approximate visible lunar illumination. Not a count of fireflies or a species forecast.",
      "joke": "The moon is charging the insects for stage lighting.",
      "source": "https://science.nasa.gov/moon/moon-phases/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + firefly / 1) \u00f7 (1 + moonlight / 1)",
      "color": "#bbd49b",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 25,
      "selected": true
    },
    {
      "id": "POLLEN-PUDDLE",
      "symbol": "POLLEN PARTY / PUDDLE",
      "name": "Pollen Party / Puddle",
      "group": "Ecology",
      "a": "pollen",
      "b": "rain7",
      "scaleA": 1,
      "scaleB": 20,
      "meaning": "A seasonal warm-dry-wind screen versus precipitation. It does not measure pollen concentration or allergy exposure.",
      "joke": "The flowers have organised an unsolicited mailing list.",
      "source": "https://power.larc.nasa.gov/docs/services/api/temporal/daily/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + pollen / 1) \u00f7 (1 + rain7 / 20)",
      "color": "#8fbcda",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 24,
      "selected": true
    },
    {
      "id": "LEAF-BREEZE",
      "symbol": "LEAF EXIT / BREEZE",
      "name": "Leaf Exit / Breeze",
      "group": "Ecology",
      "a": "leafExit",
      "b": "wind",
      "scaleA": 1,
      "scaleB": 4,
      "meaning": "A calendar-based autumn shedding window versus mean wind. No leaf mass or gust sensor is connected.",
      "joke": "The trees are downsizing their stationery department.",
      "source": "https://power.larc.nasa.gov/docs/services/api/temporal/daily/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + leafExit / 1) \u00f7 (1 + wind / 4)",
      "color": "#c3a6df",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 23,
      "selected": true
    },
    {
      "id": "BLOSSOM-FROST",
      "symbol": "BLOSSOM BET / FROST BITE",
      "name": "Blossom Bet / Frost Bite",
      "group": "Ecology",
      "a": "degreeDays",
      "b": "frost",
      "scaleA": 60,
      "scaleB": 5,
      "meaning": "Seven-day growing-degree accumulation above 5 C versus minimum-temperature frost deficit. Not bud phenology or actual frost damage.",
      "joke": "Spring has placed a limit order. Winter is the counterparty.",
      "source": "https://power.larc.nasa.gov/docs/services/api/temporal/daily/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + degreeDays / 60) \u00f7 (1 + frost / 5)",
      "color": "#e1c386",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 22,
      "selected": true
    },
    {
      "id": "MOSS-CONCRETE",
      "symbol": "MOSS HOTEL / HOT PAVEMENT",
      "name": "Moss Hotel / Hot Pavement",
      "group": "Ground",
      "a": "moss",
      "b": "hotSurface",
      "scaleA": 1,
      "scaleB": 1,
      "meaning": "Humid, dim conditions versus warm irradiation. These are habitat and surface-heating screens, not measured moss health or pavement temperature.",
      "joke": "The moss hotel offers five stars and no plumbing.",
      "source": "https://power.larc.nasa.gov/docs/services/api/temporal/daily/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + moss / 1) \u00f7 (1 + hotSurface / 1)",
      "color": "#bbd49b",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 25,
      "selected": true
    },
    {
      "id": "SNOW-SUN",
      "symbol": "SNOW DREAM / SUN SNOOZE",
      "name": "Snow Dream / Sun Snooze",
      "group": "Ground",
      "a": "snowPotential",
      "b": "thaw",
      "scaleA": 5,
      "scaleB": 10,
      "meaning": "Precipitation under cold daily temperatures versus warm solar exposure. No snow water equivalent, snowpack or melt rate is claimed.",
      "joke": "Snow has filed an appeal against the afternoon.",
      "source": "https://power.larc.nasa.gov/docs/services/api/temporal/daily/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + snowPotential / 5) \u00f7 (1 + thaw / 10)",
      "color": "#8fbcda",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 24,
      "selected": true
    },
    {
      "id": "LAUNDRY-DEW",
      "symbol": "LAUNDRY / DEWPOINT",
      "name": "Laundry / Dewpoint",
      "group": "Everyday nature",
      "a": "drying",
      "b": "dewPotential",
      "scaleA": 1,
      "scaleB": 1,
      "meaning": "A wind-and-VPD drying screen versus condensation potential. It cannot determine actual textile drying time.",
      "joke": "Your socks are now a weather station with trust issues.",
      "source": "https://weather.metoffice.gov.uk/learn-about/weather/types-of-weather/temperature/dew",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + drying / 1) \u00f7 (1 + dewPotential / 1)",
      "color": "#c3a6df",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 23,
      "selected": true
    },
    {
      "id": "RAINBOW-GREY",
      "symbol": "RAINBOW CHANCE / GREY SKY",
      "name": "Rainbow Chance / Grey Sky",
      "group": "Sky",
      "a": "rainbow",
      "b": "shade",
      "scaleA": 1,
      "scaleB": 0.5,
      "meaning": "Daily rain and sunlight co-occurrence screen versus inferred shade. Daily averages cannot prove the geometry or timing of a rainbow.",
      "joke": "The rainbow desk only accepts seven-colour collateral.",
      "source": "https://power.larc.nasa.gov/docs/services/api/temporal/daily/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + rainbow / 1) \u00f7 (1 + shade / 0.5)",
      "color": "#e1c386",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 22,
      "selected": true
    },
    {
      "id": "PUDDLE-PAROLE",
      "symbol": "PUDDLE / PAROLE",
      "name": "Puddle / Parole",
      "group": "Ground",
      "a": "rain7",
      "b": "drying",
      "scaleA": 20,
      "scaleB": 1,
      "meaning": "Recent water supply versus evaporative demand screen. No puddle depth, infiltration or real evaporation rate is measured.",
      "joke": "The puddle is negotiating early release.",
      "source": "https://power.larc.nasa.gov/docs/services/api/temporal/daily/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + rain7 / 20) \u00f7 (1 + drying / 1)",
      "color": "#bbd49b",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 25,
      "selected": true
    },
    {
      "id": "HAIR-FRIZZ",
      "symbol": "HAIR FRIZZ / DRY AIR",
      "name": "Hair Frizz / Dry Air",
      "group": "Everyday nature",
      "a": "humidity",
      "b": "vpd",
      "scaleA": 80,
      "scaleB": 1,
      "meaning": "Relative humidity versus atmospheric drying pressure. A playful moisture contrast, not an individual hair prediction.",
      "joke": "The hair desk has broken through every resistance level.",
      "source": "https://weather.metoffice.gov.uk/learn-about/weather/types-of-weather/temperature/dew",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + humidity / 80) \u00f7 (1 + vpd / 1)",
      "color": "#8fbcda",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 24,
      "selected": true
    },
    {
      "id": "SUNRISE-SNOOZE",
      "symbol": "DAYLIGHT / SNOOZE",
      "name": "Daylight / Snooze",
      "group": "Orbit",
      "a": "daylight",
      "b": "night",
      "scaleA": 12,
      "scaleB": 12,
      "meaning": "Approximate astronomical daylight versus darkness at Prague latitude, using the solar disc centre without refraction. Not measured sunshine.",
      "joke": "The Sun keeps moving the meeting to an earlier hour.",
      "source": "https://science.nasa.gov/moon/moon-phases/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + daylight / 12) \u00f7 (1 + night / 12)",
      "color": "#c3a6df",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 23,
      "selected": true
    },
    {
      "id": "FLARE-NAP",
      "symbol": "SOLAR FLARES / SOLAR NAPS",
      "name": "Solar Flares / Solar Naps",
      "group": "Space weather",
      "a": "flareWeight7",
      "b": "reportFree7",
      "scaleA": 10,
      "scaleB": 7,
      "meaning": "Sum of reported flare peak-flux class weights over seven days versus report-free days. Peak weights are not energy; no report does not prove a quiet Sun.",
      "joke": "The Sun has hit Reply All in X-rays.",
      "source": "https://ccmc.gsfc.nasa.gov/tools/DONKI/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + flareWeight7 / 10) \u00f7 (1 + reportFree7 / 7)",
      "color": "#e1c386",
      "geography": "Sun / planetary geomagnetic network; Prague night geometry",
      "researchFrequency": "Daily completed UTC periods",
      "score": 22,
      "selected": true
    },
    {
      "id": "AURORA-SLEEP",
      "symbol": "AURORA ALARM / BEAUTY SLEEP",
      "name": "Aurora Alarm / Beauty Sleep",
      "group": "Space weather",
      "a": "stormHours",
      "b": "night",
      "scaleA": 6,
      "scaleB": 12,
      "meaning": "Hours with planetary Kp at least 5 versus local night duration. Kp is retrospective and does not guarantee an aurora at this location.",
      "joke": "The sky has switched on its most expensive screensaver.",
      "source": "https://kp.gfz.de/en/data",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + stormHours / 6) \u00f7 (1 + night / 12)",
      "color": "#bbd49b",
      "geography": "Sun / planetary geomagnetic network; Prague night geometry",
      "researchFrequency": "Daily completed UTC periods",
      "score": 25,
      "selected": true
    },
    {
      "id": "MAGNET-CALM",
      "symbol": "MAGNETIC DRAMA / CALM",
      "name": "Magnetic Drama / Calm",
      "group": "Space weather",
      "a": "ap",
      "b": "quietHours",
      "scaleA": 15,
      "scaleB": 12,
      "meaning": "Daily Ap disturbance amplitude versus hours with Kp below 2. Different summaries of the same observatory network; not independent causes.",
      "joke": "Earth has muted the Sun for three hours.",
      "source": "https://kp.gfz.de/en/data",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + ap / 15) \u00f7 (1 + quietHours / 12)",
      "color": "#8fbcda",
      "geography": "Sun / planetary geomagnetic network; Prague night geometry",
      "researchFrequency": "Daily completed UTC periods",
      "score": 24,
      "selected": true
    },
    {
      "id": "SUNSPOT-RADIO",
      "symbol": "SUN FRECKLES / RADIO HUM",
      "name": "Sun Freckles / Radio Hum",
      "group": "Space weather",
      "a": "swpcSpots",
      "b": "radioMonthly",
      "scaleA": 100,
      "scaleB": 100,
      "meaning": "NOAA observed SWPC monthly sunspot count versus monthly F10.7 radio flux. Both are solar activity measures with monthly cadence.",
      "joke": "The Sun is trying a new skincare routine. The radio disagrees.",
      "source": "https://www.swpc.noaa.gov/products/solar-cycle-progression",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + swpcSpots / 100) \u00f7 (1 + radioMonthly / 100)",
      "color": "#c3a6df",
      "geography": "Sun / planetary geomagnetic network; Prague night geometry",
      "researchFrequency": "Monthly",
      "score": 23,
      "selected": true
    },
    {
      "id": "RADIO-MAGNET",
      "symbol": "SOLAR RADIO / MAGNETIC DRAMA",
      "name": "Solar Radio / Magnetic Drama",
      "group": "Space weather",
      "a": "radio",
      "b": "ap",
      "scaleA": 100,
      "scaleB": 15,
      "meaning": "Daily observed F10.7 radio flux versus daily Ap. Solar radio emission is not a measurement of Earth-directed flare or CME arrival.",
      "joke": "The Sun has a podcast. Earth prefers silence.",
      "source": "https://kp.gfz.de/en/data",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + radio / 100) \u00f7 (1 + ap / 15)",
      "color": "#e1c386",
      "geography": "Sun / planetary geomagnetic network; Prague night geometry",
      "researchFrequency": "Daily completed UTC periods",
      "score": 22,
      "selected": true
    },
    {
      "id": "TIDE-MOON",
      "symbol": "TIDAL TUG / MOONLIGHT",
      "name": "Tidal Tug / Moonlight",
      "group": "Orbit",
      "a": "tidalAlignment",
      "b": "illumination",
      "scaleA": 1,
      "scaleB": 1,
      "meaning": "A simple lunar-phase alignment proxy versus illuminated lunar fraction. No local tide height, bathymetry or ocean response is calculated.",
      "joke": "The Moon has billed the ocean for overtime.",
      "source": "https://science.nasa.gov/moon/moon-phases/",
      "unit": "regularized proxy ratio",
      "formula": "100 \u00d7 (1 + tidalAlignment / 1) \u00f7 (1 + illumination / 1)",
      "color": "#bbd49b",
      "geography": "Prague reference grid \u00b7 50.08 N, 14.42 E",
      "researchFrequency": "Daily completed UTC periods",
      "score": 25,
      "selected": true
    }
  ],
  "trading": "Research readings and source vintages are distinct from synthetic intraday trading prices. New source-derived targets are introduced after receipt with a six-hour smooth transition; historical source gaps are never measured candles.",
  "regions": [
    {
      "id": "prague",
      "dataset": "nasa-power-prague",
      "name": "Prague reference grid",
      "latitude": 50.08,
      "longitude": 14.42,
      "habitat": "Central European reference climate",
      "note": "A reference grid, not an urban street sensor."
    },
    {
      "id": "bohemian-forest",
      "dataset": "nasa-power-bohemian-forest",
      "name": "Bohemian Forest \u00b7 forest-floor desk",
      "latitude": 48.95,
      "longitude": 13.63,
      "habitat": "Wooded upland reference area",
      "note": "Regional moisture and temperature conditions; no mushroom abundance survey."
    },
    {
      "id": "alps",
      "dataset": "nasa-power-alps",
      "name": "Tyrolean Alps \u00b7 upland desk",
      "latitude": 47.18,
      "longitude": 11.41,
      "habitat": "Alpine regional reference area",
      "note": "Grid averages smooth valleys and mountain slopes. No avalanche or trail forecast."
    },
    {
      "id": "po-lowlands",
      "dataset": "nasa-power-po-lowlands",
      "name": "Po Valley \u00b7 lowland desk",
      "latitude": 45.05,
      "longitude": 10.65,
      "habitat": "Lowland regional reference area",
      "note": "A broad lowland weather grid; no local flood, crop or fungal-growth forecast."
    }
  ],
  "instruments": {
    "kind": "natural indices",
    "quoteCurrency": "CR",
    "researchUnit": "index points",
    "gameUnit": "CR / index unit",
    "note": "CR are existing paper-game credits. No blockchain asset or real-money exchange is added. Real dated inputs determine a regularized research index; source-anchored synthetic movement determines the separate intraday CR game quote. IDs remain stable for compatibility."
  },
  "longHistory": {
    "endpoint": "/api/v1/research/long-history?region=prague&series=temperature&view=monthly",
    "regions": [
      "prague",
      "bohemian-forest",
      "alps",
      "po-lowlands"
    ],
    "weatherStart": "1984-01",
    "solarStart": "1997-01",
    "weatherLatest": "2026-08",
    "solarLatest": "2026-09",
    "views": [
      "monthly",
      "annual",
      "anomaly (temperature only)"
    ],
    "temperatureBaseline": "1991\u20132020, same calendar month, exactly 30 valid observations",
    "note": "A static verified revised monthly backfill. Current daily collectors do not yet append this long-term monthly archive. Do not report a current month as complete. No ecological indices invented from monthly means."
  }
}
