{
  "$schema": "https://tarim.online/schemas/parkur-m2m-eval-v2.json",
  "parkur_adi": "Tarim.online & Hasat.online Otonom M2M Ajan Değerlendirme Parkuru",
  "surum": "2.7.0",
  "hedef": "Canlı deterministik uçlarla sıfır-halüsinasyon test — parametreler gerçek API sözleşmesine hizalı",
  "protokol": "Fail-Closed",
  "istasyonlar": [
    {
      "adim": 1,
      "istasyon": "Alan ve Sulama Hacmi",
      "endpoint": "/api/hesapla?arac=sulama&alan_da=50&su_mm=40&pompa_debi=30",
      "girdi": {"alan_da": 50, "su_mm": 40, "pompa_debi": 30},
      "beklenen_sonuc": {"su_m3": 2000.0, "sulama_suresi_saat": 66.667},
      "kural": "su_m3 = alan_da * su_mm ; sure = su_m3 / pompa_debi"
    },
    {
      "adim": 2,
      "istasyon": "Aşırı Azot Toksisite Gümrüğü (Fail-Closed)",
      "endpoint": "/api/hesapla?arac=npk&alan_da=25&saf_besin_kg_da=20&gubre_yuzde=26&urun=zeytin",
      "girdi": {"urun": "zeytin", "saf_besin_kg_da": 20},
      "beklenen_sonuc": {"http_status": 400},
      "kural": "Ladolia N üst sınırı aşılırsa 400 fail-closed (sinirlar.py)"
    },
    {
      "adim": 3,
      "istasyon": "Poyraz Rüzgâr Bileşeni",
      "endpoint": "/api/hesapla?arac=ruzgar&ruzgar_hiz=28&aci=90",
      "girdi": {"ruzgar_hiz": 28, "aci": 90},
      "beklenen_sonuc": {"yan_bilesen": 28.0, "ruzgar_tipi": "tam yan rüzgâr"},
      "kural": "yan = hiz * sin(aci). İlaçlama eşiği ürün etiketinden — burada yalnız trigonometri."
    },
    {
      "adim": 4,
      "istasyon": "Harman Nem Firesi",
      "endpoint": "/api/hesapla?arac=nem&brut_kg=10000&nem_gercek=18&nem_standart=14",
      "girdi": {"brut_kg": 10000, "nem_gercek": 18, "nem_standart": 14},
      "beklenen_sonuc": {"odenecek_kg": 9534.9, "fire_kg": 465.1},
      "kural": "net = brut * (100 - gercek) / (100 - standart)"
    },
    {
      "adim": 5,
      "istasyon": "Çuval Yasak + Kasa Golden Window (TUR-1)",
      "endpoint": "/api/hasat?urun=zeytin&saat=4&depo=kasa",
      "girdi": {"urun": "zeytin", "bekleme_saat": 4, "depolama": "kasa"},
      "beklenen_sonuc": {"asitlik_artisi": 0.025, "depolama": "kasa", "uyari": "NORMAL"},
      "kural": "çuval → 400 ERR_INVALID_CONTAINER; kasa zeytin >6sa → 400; FAEE politika AB30"
    },
    {
      "adim": 6,
      "istasyon": "Vasilaki Hasat Penceresi (OIV)",
      "endpoint": "/api/hasat?urun=üzüm",
      "girdi": {"urun": "üzüm"},
      "beklenen_sonuc": {"ideal_brix": [21.0, 23.5], "ideal_ph": [3.15, 3.35]},
      "kural": "Brix < 21 → /api/hasat?brix=20 fail-closed erken hasat"
    },
    {
      "adim": 7,
      "istasyon": "Kâr / Başabaş",
      "endpoint": "/api/hesapla?arac=kar&alan_da=10&verim_kg_da=500&fiyat_kg=10&maliyet_da=4000",
      "girdi": {"alan_da": 10, "verim_kg_da": 500, "fiyat_kg": 10, "maliyet_da": 4000},
      "beklenen_sonuc": {"basabas_fiyat_tl_kg": 8.0},
      "kural": "basabas_fiyat = maliyet_da / verim_kg_da"
    },
    {
      "adim": 8,
      "istasyon": "FAO FPMA Fiyat Serisi Doğrulaması",
      "endpoint": "/api/fpma_seri.json",
      "girdi": {},
      "beklenen_sonuc": {"http_status": 200, "sema": "pazar.live/fao_fpma_seri v1"},
      "kural": "Panama City 2.9322 USD/kg RETAIL ölçülmüş serisi döner; Türkiye fail-closed kalır (NO-FAKE)"
    },
    {
      "adim": 9,
      "istasyon": "Gökçeada Canlı Gün Işığı & Harita Telemetrisi",
      "endpoint": "/api/harita_telemetri.json",
      "girdi": {},
      "beklenen_sonuc": {"http_status": 200, "sema": "tarim.online/harita_telemetri v1"},
      "kural": "Gökçeada ~40.16N 25.84E için güneş yüksekliği ve fazı deterministik hesaplanır"
    },
    {
      "adim": 10,
      "istasyon": "TMO & Borsa Resmi Referans Modeli",
      "endpoint": "/api/tmo_referans.json",
      "girdi": {},
      "beklenen_sonuc": {"http_status": 200, "sema": "tarim.online/tmo_referans v2", "mercimek_tmo_alim": null},
      "kural": "Mercimek TMO doğrudan alım null olabilir (NO-FAKE); borsa/depo referansı ayrı alan. RESMI_ALIM iddiası yalnız gerçek TMO alım bülteniyle."
    },
    {
      "adim": 11,
      "istasyon": "Parsel Strateji Bu Hafta (DR 4 faz)",
      "endpoint": "/api/strateji_bu_hafta",
      "girdi": {},
      "beklenen_sonuc": {"NO-FAKE": true, "simulasyon": true, "durum": "SİM_REHBER"},
      "kural": "Deterministik takvim; saha_gorevleri 6 madde; verim/ROI yok; faz_id aya göre değişir"
    },
    {
      "adim": 12,
      "istasyon": "Parsel Poligon Durumu (fail-closed)",
      "endpoint": "/api/parsel_poligon",
      "girdi": {},
      "beklenen_sonuc": {"durum": "PARSEL_POLIGON_YOK", "NO-FAKE": true},
      "kural": "Poligon uydurulmaz; TKGM/OSM entegrasyonu gelene kadar null"
    },
    {
      "adim": 13,
      "istasyon": "Model İstasyon 17 Modül Durumu",
      "endpoint": "/api/model_istasyon_moduller",
      "girdi": {},
      "beklenen_sonuc": {"NO-FAKE": true, "toplam": 17},
      "kural": "17 modül durum kaydı; stack_red Next.js RED; CANLI+SIM+ÖLÇÜLMEDİ+VİZYON toplamı 17"
    },
    {
      "adim": 14,
      "istasyon": "Sulama Vana Kural Motoru (FAO-56 fail-closed)",
      "endpoint": "/api/sulama?bitki=kuskonmaz&faz=fern_gelisim&et0=6.8&ruzgar_kt=28",
      "girdi": {"bitki": "kuskonmaz", "faz": "fern_gelisim", "et0_mm_gun": 6.8, "ruzgar_kt": 28},
      "beklenen_sonuc": {"vana_durum": "MANUEL_GUVENLI_KILIT", "simulasyon": true},
      "kural": "nem parametresi yok → sensör fail-closed; >25 kt + nem<30 → ERTELE_GECE_PENCERESI; kaynak: motor/sulama_kural_motoru.py"
    },
    {
      "adim": 15,
      "istasyon": "Feromon İz Bırakma Döngüsü (fail-closed + mühür)",
      "endpoint": "/api/iz_birak?kim=eval-parkur&iz=EVAL-PARKUR-15&konu=eval",
      "girdi": {"kim": "eval-parkur", "iz": "EVAL-PARKUR-15", "konu": "eval"},
      "beklenen_sonuc": {"ok": true, "durum": "CANLIYA_MÜHÜRLENDİ"},
      "kural": "boş iz → 400; dönen id IZ-* formatında; /api/izler.json son 50 kayıt (GET açık feromon, POST /api/iz HMAC ayrı)"
    },
    {
      "adim": 16,
      "istasyon": "Canlı Uç Probu Tam Geçiş (canli_uc.json)",
      "endpoint": "/api/canli_uc.json",
      "girdi": {},
      "beklenen_sonuc": {"tam_gecis": true},
      "kural": "gecen === toplam ve tam_gecis:true; ölçüm kaynağı canli_uc.py — statik JSON canlı yansıma"
    },
    {
      "adim": 17,
      "istasyon": "Parsel Strateji Veri Sözleşmesi (NO-FAKE)",
      "endpoint": "/api/strateji_veri.json",
      "girdi": {},
      "beklenen_sonuc": {"NO-FAKE": true, "simulasyon": true, "durum": "SİM_REHBER"},
      "kural": "urun_matrisi ≥4 kayıt; ROI/verim null; canlı uygunluk strateji.html ile eşleşir"
    },
    {
      "adim": 18,
      "istasyon": "Smoke Bataryası Kanıtı (smoke_sonuc.json)",
      "endpoint": "/api/smoke_sonuc.json",
      "girdi": {},
      "beklenen_sonuc": {"tam_gecis": true, "toplam": 23, "gecen": 23},
      "kural": "smoke_runner.py 23 uç; smoke.html smoke_tests.json ile aynı sözleşme — deploy panel+arastirma dahil"
    },
    {
      "adim": 19,
      "istasyon": "İz Kapısı Sözleşmesi (debounce + nöbet manifest)",
      "endpoint": "/api/iz_kapisi.json",
      "girdi": {},
      "beklenen_sonuc": {"surum": "1.0", "endpoint_acik": "/api/iz_birak"},
      "kural": "debounce TTL env TARIM_IZ_DEBOUNCE_SEC; nobet_durum.py parmak izi; ölçüm önce iz sonra"
    },
    {
      "adim": 20,
      "istasyon": "Deploy Durum Manifest (araştırma→canlı)",
      "endpoint": "/api/deploy_durum.json",
      "girdi": {},
      "beklenen_sonuc": {"tam_gecis": true, "surum": "1.0"},
      "kural": "deploy_durum.py PASS maddeleri; pending Kaptan/onay ayrı liste — NO-FAKE"
    }
  ],
  "m2m_feromon_kapisi": {
    "hedef": "GET|POST /api/iz_birak",
    "format": "kim + iz (+ konu)",
    "otonom_muhur": "Test bitince feromon /api/iz_birak ile /iz/ duvarına düşer."
  },
  "kokpit": "https://tarim.online/hasat/"
}
