{
  "sozlesmeFormati": "agent-arac/1",
  "arac": "AralikBirlestir",
  "surum": "1.0.0",
  "dosya": "aralik-birlestir.html",
  "amac": "Çoklu zaman aralıklarını normalize etmek; birleşim blokları, pozitif çakışan çiftler, temas eden çiftler, pencere boşlukları, süre toplamları ve en yüksek eşzamanlılığı deterministik JSON olarak üretmek.",
  "calismaModeli": {
    "tur": "saf senkron fonksiyon",
    "cagri": "globalThis.AralikBirlestirMotor.analizEt(girdi)",
    "ag": false,
    "yerelSaatDilimi": false,
    "simdiDegeri": false,
    "deterministik": true
  },
  "kaynaklar": [
    {
      "konu": "iCalendar PERIOD",
      "url": "https://www.rfc-editor.org/rfc/rfc5545#section-3.3.9",
      "dogrulanan": "PERIOD başlangıç/bitiş veya başlangıç/pozitif süre biçimindedir; başlangıç sondan önce olmalıdır."
    },
    {
      "konu": "iCalendar FREEBUSY",
      "url": "https://www.rfc-editor.org/rfc/rfc5545#section-3.8.2.6",
      "dogrulanan": "FREEBUSY bir veya daha fazla PERIOD değeridir; UTC biçimi ve başlangıç sonra bitiş sırası tanımlanır."
    },
    {
      "konu": "RFC3339 internet tarih-saat biçimi",
      "url": "https://www.rfc-editor.org/rfc/rfc3339#section-5.6",
      "dogrulanan": "Tam zaman Z veya sayısal offset içerir."
    },
    {
      "konu": "Offsetsiz yerel saat birlikte çalışabilirliği",
      "url": "https://www.rfc-editor.org/rfc/rfc3339#section-4.4",
      "dogrulanan": "Niteliksiz yerel saatin internet birlikte çalışabilirliği için kabul edilemez olduğu açıklanır."
    },
    {
      "konu": "Talep sinyali",
      "url": "https://suggestqueries.google.com/complete/search?client=firefox&hl=en&q=time%20overlap%20calculator",
      "dogrulanan": "2026-07-29 erişiminde time overlap calculator ve ilişkili autocomplete önerileri döndü; arama hacmi kanıtı değildir."
    }
  ],
  "kaynakSiniri": {
    "etiket": "[KAYNAK-DOĞRULANMADI — bu aracın açık sözleşmesi]",
    "kapsam": [
      "[baslangic,bitis) yarı-açık semantiği",
      "kesişim formülü",
      "temasPolitikasi davranışı",
      "birleşim ve boşluk algoritması",
      "analiz penceresinin tam kapsama şartı",
      "200 aralık kapasite limiti"
    ],
    "not": "Bu davranışlar RFC 5545 PERIOD veya FREEBUSY kuralı olarak sunulmaz."
  },
  "girdi": {
    "tip": "object",
    "alanlar": {
      "araliklar": {
        "tip": "array<object>",
        "zorunlu": true,
        "adet": "1..200",
        "ogeAlanlari": {
          "id": {
            "tip": "string | safe integer",
            "zorunlu": true,
            "birim": "tanımlayıcı",
            "normalizasyon": "Çıktıda string olur. Eksik, boş veya desteklenmeyen tipteyse #<girdi sırası+1> üretilir ve ID_OTOMATIK uyarısı verilir. Tekrarına izin verilir; girdiSirasi ayırt eder."
          },
          "baslangic": {
            "tip": "RFC3339 string | safe integer",
            "zorunlu": true,
            "birim": "RFC3339 offset/Z veya epoch milisaniye"
          },
          "bitis": {
            "tip": "RFC3339 string | safe integer",
            "zorunlu": true,
            "birim": "RFC3339 offset/Z veya epoch milisaniye",
            "kural": "baslangic < bitis"
          }
        }
      },
      "sinirSemantigi": {
        "tip": "enum string",
        "enum": [
          "[baslangic,bitis)"
        ],
        "varsayilan": "[baslangic,bitis)",
        "ilkSurumdeSabit": true
      },
      "temasPolitikasi": {
        "tip": "enum string",
        "enum": [
          "ayri",
          "birlestir"
        ],
        "varsayilan": "ayri",
        "kural": "Yalnız birleşmiş blok ayrımını etkiler; çakışma, temas, meşgul süre, boş süre ve eşzamanlılığı değiştirmez."
      },
      "analizPenceresi": {
        "tip": "object | null",
        "varsayilan": null,
        "birim": "RFC3339 offset/Z veya epoch milisaniye",
        "ogeAlanlari": {
          "baslangic": "RFC3339 string | safe integer",
          "bitis": "RFC3339 string | safe integer"
        },
        "kurallar": [
          "baslangic < bitis",
          "Pencere her giriş aralığını tam kapsar: pencere.baslangic <= aralik.baslangic ve aralik.bitis <= pencere.bitis.",
          "Pencere null ise bosluklar=[] ve toplamBosSureMs=null olur."
        ]
      }
    }
  },
  "zamanDonusumu": {
    "kaynakDurumu": "[KAYNAK-DOĞRULANMADI — bu aracın açık sözleşmesi]",
    "hedef": "epoch milisaniye safe integer",
    "epochAraligi": "-8640000000000000..8640000000000000 (ECMAScript Date sınırları, uçlar dahil)",
    "aritmetikGuvenligi": "Her aralık/pencere/blok süresi ve toplam ham süre Number.isSafeInteger kalmalıdır; aksi durumda GECERSIZ_ZAMAN.",
    "rfc3339Deseni": "YYYY-MM-DDTHH:mm:ss[.kesir](Z|+HH:MM|-HH:MM); T ve Z küçük harf olabilir.",
    "sayisalString": "reddedilir; epoch ms JSON integer olmalıdır",
    "offsetsizDatetime": "OFFSET_GEREKLI",
    "takvimDogrulamasi": "Ay, gerçek gün, saat, dakika, saniye ve offset alanları ayrıca doğrulanır.",
    "kesir": "Üç haneden uzun saniye kesri milisaniyeye doğru kesilir ve ALT_MILISANIYE_KESILDI uyarısı verilir.",
    "artikSaniye": "RFC3339 :60 bu v1 epoch-ms çizelgesinde temsil edilmez ve GECERSIZ_ZAMAN ile reddedilir.",
    "eksiSifirOffset": "-00:00 an olarak UTC işlenir ve BILINMEYEN_YEREL_OFFSET uyarısı verilir.",
    "yerelSaatDilimiTahmini": false
  },
  "cikti": {
    "tip": "object",
    "atomiklik": "hata null değilse kısmi analiz üretilmez; sonuç dizileri boştur ve ozet null olur",
    "alanlar": {
      "arac": "string: AralikBirlestir",
      "surum": "string",
      "sinirSemantigi": "string: [baslangic,bitis)",
      "temasPolitikasi": "ayri | birlestir | null",
      "analizPenceresi": "normalize pencere object | null",
      "normalAraliklar": {
        "tip": "array<object>",
        "sira": "baslangicMs, bitisMs, girdiSirasi artan",
        "ogeAlanlari": [
          "id:string",
          "girdiSirasi:integer",
          "baslangicMs:integer ms",
          "bitisMs:integer ms",
          "baslangicUTC:string ISO",
          "bitisUTC:string ISO",
          "sureMs:integer ms"
        ]
      },
      "birlesmisBloklar": {
        "tip": "array<object>",
        "sira": "kronolojik",
        "ogeAlanlari": [
          "blokSirasi:integer",
          "baslangicMs:integer ms",
          "bitisMs:integer ms",
          "baslangicUTC:string ISO",
          "bitisUTC:string ISO",
          "sureMs:integer ms",
          "kaynaklar:array<{id:string,girdiSirasi:integer}>"
        ]
      },
      "cakisanCiftler": {
        "tip": "array<object>",
        "kural": "Yalnız sureMs > 0 çiftler; normal sıralı i<j düzeni.",
        "ogeAlanlari": [
          "birinciId:string",
          "birinciGirdiSirasi:integer",
          "ikinciId:string",
          "ikinciGirdiSirasi:integer",
          "kesisimBaslangicMs:integer ms",
          "kesisimBitisMs:integer ms",
          "kesisimBaslangicUTC:string ISO",
          "kesisimBitisUTC:string ISO",
          "sureMs:integer ms"
        ]
      },
      "temasEdenCiftler": {
        "tip": "array<object>",
        "kural": "b1==a2 veya b2==a1 olan bütün özgün çiftler; çakışma süresi sıfırdır.",
        "ogeAlanlari": [
          "birinciId:string",
          "birinciGirdiSirasi:integer",
          "ikinciId:string",
          "ikinciGirdiSirasi:integer",
          "temasAniMs:integer ms",
          "temasAniUTC:string ISO"
        ]
      },
      "bosluklar": {
        "tip": "array<object>",
        "kural": "Yalnız pozitif süreli, pencere içindeki ardışık farklar.",
        "ogeAlanlari": [
          "boslukSirasi:integer",
          "baslangicMs:integer ms",
          "bitisMs:integer ms",
          "baslangicUTC:string ISO",
          "bitisUTC:string ISO",
          "sureMs:integer ms"
        ]
      },
      "ozet": {
        "tip": "object | null",
        "alanlar": {
          "aralikSayisi": "integer",
          "blokSayisi": "integer",
          "cakisanCiftSayisi": "integer",
          "temasEdenCiftSayisi": "integer",
          "toplamHamSureMs": "integer ms",
          "toplamBirlesimMesgulSureMs": "integer ms",
          "toplamBosSureMs": "integer ms | null",
          "enYuksekEszamanlilik": "integer"
        }
      },
      "uyarilar": "array<{kod:string,mesaj:string,yol:string|null}>",
      "hata": "null | {kod:hataKodu,mesaj:string,yol:string|null}"
    }
  },
  "hataKodlari": {
    "GECERSIZ_ZAMAN": "RFC3339/epoch değerinin, zaman alanının, sabit sınırın veya enum girişinin geçersiz olması; Date aralığı, güvenli süre/toplam sınırı ve artık saniye desteği dışındadır.",
    "OFFSET_GEREKLI": "Datetime string değerinde Z veya sayısal offset bulunmaması.",
    "TERS_ARALIK": "Aralık ya da pencere başlangıcının bitişe eşit veya büyük olması.",
    "BOS_LISTE": "araliklar alanının olmaması, array olmaması veya boş olması.",
    "PENCERE_DISI": "En az bir aralığın analiz penceresi tarafından tam kapsanmaması.",
    "COK_FAZLA_ARALIK": "araliklar uzunluğunun 200'ü aşması."
  },
  "hesap": {
    "kaynakDurumu": "[KAYNAK-DOĞRULANMADI — bu aracın açık sözleşmesi]",
    "kesisimSuresi": "max(0, min(bitis1,bitis2) - max(baslangic1,baslangic2))",
    "temas": "bitis1==baslangic2 veya bitis2==baslangic1; çakışma değildir",
    "birlesim": "Başlangıç, bitiş, özgün sıra ile sırala. Sonraki başlangıç mevcut bitişten küçükse birleştir; temasPolitikasi=birlestir ise eşitlikte de birleştir.",
    "bosluk": "Tam kapsayan analiz penceresi ile kronolojik birleşmiş bloklar arasındaki yalnız pozitif farklar.",
    "eszamanlilik": "max_t |{i: baslangic_i <= t < bitis_i}|; aynı milisaniyede bitiş olayları başlangıç olaylarından önce uygulanır."
  },
  "kapasiteVeKarmasiklik": {
    "maksimumAralik": 200,
    "limitDahil": true,
    "ciftListeleri": {
      "zaman": "O(n^2)",
      "enKotuCiftSayisi": 19900,
      "gerekce": "Bütün özgün çiftlerin doğruluk öncelikli üretilmesi çıktı boyutunu da O(n^2) yapar."
    },
    "siralaBirlestirSweep": {
      "zaman": "O(n log n)",
      "ekBellek": "O(n)"
    }
  },
  "ornekCagri": {
    "araliklar": [
      {
        "id": "A",
        "baslangic": "2026-01-05T09:00:00Z",
        "bitis": "2026-01-05T10:00:00Z"
      },
      {
        "id": "B",
        "baslangic": 1767610800000,
        "bitis": 1767614400000
      }
    ],
    "sinirSemantigi": "[baslangic,bitis)",
    "temasPolitikasi": "ayri",
    "analizPenceresi": {
      "baslangic": "2026-01-05T09:00:00Z",
      "bitis": "2026-01-05T12:00:00Z"
    }
  },
  "ornekCiktiOzeti": {
    "aralikSayisi": 2,
    "blokSayisi": 2,
    "cakisanCiftSayisi": 0,
    "temasEdenCiftSayisi": 0,
    "toplamHamSureMs": 7200000,
    "toplamBirlesimMesgulSureMs": 7200000,
    "toplamBosSureMs": 3600000,
    "enYuksekEszamanlilik": 1
  }
}
