napsak?

Scrape ve ingestion mimarisi

Bir kaynak sayfasının doğrulanmış, aranabilir ve halka açık bir İstanbul etkinliğine dönüşürken geçtiği bütün üretim yolu.

Kaynak sayfasından okuyucuya

Adapter'ın varlığı yayın izni değildir. Kanıt önce private katmana girer; public olgu ancak bağımsız yayın kapılarından sonra oluşur.

Kaynak yüzeyleri

  • Kültür.İstanbulYapısal fetch, yalnız uygun hatada kontrollü fallback
  • BiletinialListe yüzeyleri ve bütçeli detay istekleri
  • NardisWordPress REST inventory ve detay istekleri
  • SALTGerekli olguları taşıyan program kartları
  • Zorlu PSMYakın program ve tarih yürüyüşü
  • Müze GazhaneWordPress REST içindeki ACF alanları
  1. 01

    Cron ve politika

    Kaynak başına altı saatlik ofset; source policy tek başına yayın izni değildir.

  2. 02

    Kaynağa özel Workflow

    Aynı teslim ikinci acquisition açmasın diye deterministik run ve instance kimliği.

  3. 03

    Sınırlı fetch

    İzinli host, timeout, hız ve bütçe. Challenge veya 403 görülürse genişleme durur.

  4. 04

    Deterministik extractor

    Şema doğrulaması ve her olgu için fieldEvidence; tarih ya da mekân tahmin edilmez.

  5. 05

    Private R2

    Ham cevap, redakte artifact ve hashli manifest. Manifest her zaman en son yazılır.

  6. 06

    COMMIT_QUEUE

    Payload yerine yalnız manifest anahtarı ve hash taşınır.

  7. 07

    Queue consumer

    Run, URL, manifest, hash ve extraction zinciri yeniden doğrulanır.

  8. 08

    D1 kontrol düzlemi

    Run, attempt, source record, observation, candidate, incident ve karar izi.

  9. 09

    Yayın kapısı

    Kaynak profili, active admission, güncellik, İstanbul ve sabit evidence yolları birlikte geçer.

  10. 10

    Canonical D1

    Doğrulanmış event, occurrence, venue, source link ve revision.

  11. 11

    Astro SSR ve okuyucu

    SQL filtreleri, cursor sayfalama, üçlü kart grid ve erişilebilir infinite scroll.

Dead letter

Retry tükenirse D1 indeksi mesajı tutar; Access arkasındaki ops yüzeyi replay veya dismiss kararı ister.

Repair shadow

Uygun hata kodu sınırlı bir öneriye dönebilir; yalnız deterministik shadow replay'den ve operatör kararından geçer.

Retention / withdrawal

Purge Workflow private R2 ile D1 referanslarını tarar, siler ve reconcile eder; gerekirse taze gözlem ister.

Sağlık gözlemi

pnpm health ile public journey monitor cron, queue, DLQ, purge ve okuyucu yolunu birlikte izler.

Bir kanıt paketinin yolu

İki idempotency katmanı acquisition'ı, manifest kimliği ise commit tarafını korur. Aynı manifest güvenli replay'dir; aynı attempt üzerindeki farklı manifest fail-closed durur.

  1. 01Cron

    scheduledTime ve sourceId ile doğru Workflow'u çağırır.

  2. 02Workflow

    Deterministik workflow/run kimliğini üretir.

  3. 03D1

    createOrGetRun ile yeni ya da mevcut queued run'ı döndürür.

  4. 04Kaynak

    Yalnız önceden tanımlı liste veya detay yüzeyi sınırlı biçimde fetch edilir.

  5. 05Extractor

    HTML, JSON, JSON-LD veya ACF verisini şemaya ve fieldEvidence'a dönüştürür.

  6. 06Private R2

    Artifact'lar yazılır ve her nesnenin SHA-256 özeti alınır.

  7. 07Private R2

    Manifest, paket tamamlandıktan sonra en son yazılır.

  8. 08COMMIT_QUEUE

    evidence_committed(runId, manifestKey, manifestHash) teslim edilir.

  9. 09Consumer

    Manifest ile artifact zincirini R2'den yeniden okur ve doğrular.

  10. 10D1

    Attempt, artifact index, record, observation ve candidate batch yazılır.

  11. 11Detay fan-out

    Inventory detay istiyorsa detail_requested işleri bütçeli batch'lere ayrılır.

  12. 12Trusted gate

    Profil, admission, evidence yolları ve güncellik denetlenir.

  13. 13Canonical

    Kapılar geçerse yayınlanır; karar verilemiyorsa candidate karantinada kalır.

Durum makineleri

quarantined acquisition hatası değildir: kanıt commit edilmiştir, fakat yayın kararı ayrı sınırda bekler.

Source run

  1. queued → captured: kanıt yakalandı
  2. queued → quarantined: review gerekli
  3. queued → failed: terminal acquisition
  4. captured/quarantined → kendisi: aynı manifest replay

Candidate

  1. yeni → quarantined
  2. quarantined → approved: factual review
  3. quarantined → rejected
  4. approved → published
  5. published → published: yeni gözlem

Withdrawal

  1. pending → applied: public kayıt çekildi
  2. applied → purging: private scope bulundu
  3. purging → purged: R2 ve D1 reconcile tamam
  4. purged → kapalı

Veri sahipliği ve güven sınırları

Private EVIDENCE kaynak kanıtıdır; D1 aranabilir indeks ve karar geçmişidir. Public Worker private kanıtı okumaz, yalnız ayrı PUBLIC_MEDIA bucket'ındaki reviewed görselleri sunar.

KatmanNe tutar?Yetkili olduğu konuPublic mi?
Workflow belleğiO anki HTTP cevabı ve ara değerlerGeçici çalışma alanıHayır
Private R2 / EVIDENCERaw response, redakte artifact, trace ve manifestKaynak o anda ne söyledi?Hayır
D1 control planeRun, attempt, record, observation, candidate, incident ve DLQİşlem geçmişi ve operatör kararıHayır
Canonical D1Event, occurrence, venue, source link, revision ve media ledgerPublic üründe gösterilebilir doğrulanmış olgularWorker üzerinden
Public R2 / PUBLIC_MEDIAHak incelemesi geçmiş event ve venue görsel byte'larıHashli public medya nesnesiWorker üzerinden
Public DTO / HTMLBaşlık, tarih, saat, mekân, kategori, fiyat, kaynak, freshness ve medya provenanceOkuyucunun daraltılmış sözleşmesiEvet
Hermes staging corpusreference_only legacy kayıtlarYeniden doğrulanacak iş listesiHayır

Retry ve hata semantiği

Retry kararı “bir daha dene” kolaycılığı değil; dış kaynağa yük, kanıt kimliği ve operatör denetimi birlikte düşünülerek verilir.

Arıza noktasıDavranışNeden
Tam acquisitionWorkflow retry 0; timeout 15 dakikaAynı yüzeyi tekrar fetch edip kaynağa yük bindirmemek ve run altında kanıt çakıştırmamak
Kültür structured fetchYalnız sınıflandırılmış fallback-eligible hatada browserHer HTTP hatasını challenge aşma girişimine çevirmemek
Evidence commitEn fazla 3 retry; 30–900 saniye exponential delayDış kaynağı tekrar fetch etmeden geçici R2/D1 hatasını iyileştirmek
Retry tükenen mesajDead letter indeksine yazılırMesaj kaybolmaz; Access arkasından replay ya da dismiss gerekir
Extraction / recipeYalnız shadow replay ve operatör kararıRepair ajanı üretimi doğrudan değiştiremez
Owner withdrawalKalıcı tombstone ve dayanıklı purgeKayıt yeni kanıtla geri gelemez
Retention withdrawalPurge bitince geçici fence kalkarTekrarlayan kayıt tüm kaynağı sonsuza kadar engellemez

Public okuma ve infinite scroll

Facet toplamları yalnız ilk sayfadan değil, cursor öncesindeki bütün filtreli kümeden gelir. Aynı saatteki etkinlikler startsAt + eventId ile deterministik kalır.

  1. 01

    Paylaşılabilir URL

    q, window, date, category, district, time, price ve cursor

  2. 02

    Strict parser

    Şehir ve izinli değer sınırları

  3. 03

    D1 feed CTE

    Published event + occurrence ve candidate_publications şartı

  4. 04

    SQL filtreleri

    İstanbul, tarih, yerel saat, kategori, semt, fiyat ve arama

  5. 05

    Occurrence seçimi

    Event başına en yakın yayınlanmış gösterim

  6. 06

    Deterministik sayfa

    startsAt + eventId sırası ve limit + 1

  7. 07

    Astro SSR

    Semantik kartlar ve normal Daha fazla bağlantısı

  8. 08

    Infinite scroll

    IntersectionObserver 700 px kala aynı URL'yi fetch eder

  9. 09

    Güvenli duruş

    eventId dedupe; boş veya looping cursor'da durur, JS yoksa link çalışır

Görsel kanıt yolu

Bir URL'in herkese açık olması yeniden yayın hakkı değildir. Görsel, event verisinden ayrı bir hak ve byte doğrulama zincirinden geçer.

  1. 01

    Hak incelemesi

    Etkinlik ya da mekânı tasvir etme hakkı, attribution ve rights statement birlikte kaydedilir.

  2. 02

    Byte doğrulaması

    MIME imzası, boyut, piksel ölçüsü, animasyon ve gizli metadata dosyanın kendi byte'larından denetlenir. Checksum yoksa veya eşleşmiyorsa public byte verilmez.

  3. 03

    Content identity

    SHA-256 hash event veya venue kimliğiyle birleşir; hotlink yerine Napsak kontrollü nesne anahtarı oluşur.

  4. 04

    Public media R2

    Yalnız incelemesi geçen byte'lar PUBLIC_MEDIA bucket'ına yazılır; private EVIDENCE ile karışmaz.

  5. 05

    Ayrı ledger

    event_media_assets belirli etkinliği, venue_media_assets yalnız canonical mekânı temsil eder.

  6. 06

    Kart resolver'ı

    Seçim event → venue → kategori sırasındadır; venue fallback'i okuyucuya açıkça etiketlenir.

Seçim: event → venue → kategori. Belirli etkinliği gösteren medya her zaman önce gelir; mekân fotoğrafı event posteri gibi sunulmaz.

Kaynaklara göre acquisition biçimi

Her kaynak aynı ortak kanıt sözleşmesine çıkar; fakat okunan yüzey ve detay stratejisi kaynağın yayımladığı gerçek yapıya göre sınırlıdır.

KaynakCronOkunan yüzeyDetay stratejisi
Kültür.İstanbul23 */6 * * *Yapılandırılmış etkinlik cevabıUygun hatada kontrollü browser fallback
Biletinial41 */6 * * *Kategori ve şehir listeleriGörülmemiş İstanbul kartlarına öncelikli bütçeli detay
Nardis53 */6 * * *WordPress REST inventoryKaynak kayıtları için bütçeli detay
SALT07 */6 * * *Program kartlarıKart yeterli olduğu için detay yok
Zorlu PSM31 */6 * * *Yakın program + ?date=YYYY-MM-DDKart yeterli olduğu için detay yok
Müze Gazhane19 */6 * * *WordPress REST ACFGelecek programı taşıyan bounded liste fetch

Yerel rollout kuyruğu — canlı değildir

  • Pera FilmFactual publication yerelde hazır; staging migration ve smoke bekliyor.
  • Beykoz KunduraFactual publication ve resmi harita koordinatları yerelde hazır.
  • ENKA SanatDeterministik shadow lane hazır; hak/policy kararı olmadan yayın yok.
  • Akbank Sanatİstanbul venue allowlist'li shadow lane hazır; hak/policy kararı bekliyor.
  • AKM, Kadıköy kültür ve İBB YazPolicy-first source lane; active publication değildir.

Baskı noktaları ve değişmez sınırlar

Sistem büyürken hangi kısımların önce ölçülmesi, hangi sınırların ise pazarlık konusu yapılmaması gerektiği burada kayıtlıdır.

  1. Acquisition tam idempotent değil

    Dış kaynak adımlarında otomatik retry kapalı. Daha hızlı iyileşme için önce sayfa kimliği ve content-addressed bundle gerekir.

  2. Queue commit seri

    max_batch_size 5 ve max_concurrency 1, D1 yarışlarını azaltıyor. Büyümede queue age ölçülmeden concurrency artırılmamalı.

  3. Onboarding çok kayıtlı

    Extractor union, Workflow binding/cron, doctor haritası, source policy, trusted profile ve admission birlikte eklenmeli.

  4. Arama SQL tabanlı

    Bugünkü katalog için yeterli. Ayrı indeks ancak LIKE/facet CTE maliyeti ölçüldüğünde düşünülmeli.

  5. Tek public medya varyantı

    Ledger ve hak zinciri var; ortak sözleşme yalnız 2 MiB, 640×320–2560×2560 aralığında önceden optimize edilmiş dosyayı kabul ediyor. Responsive card/hero varyantları gerçek hacim ve dönüşüm yetkisi ölçülünce eklenmeli.

Değişmez sınırlar

  • Ham kanıt candidate'dan önce ve public yüzeyden ayrı tutulur.
  • Kaynak açıklaması ve pazarlama metni public karta taşınmaz; görsel yalnız ayrı hak incelemesi ve ledger kaydıyla geçer.
  • Hermes yalnız staging'de reference_only yeniden doğrulama kuyruğudur.
  • Dead letter sessizce kaybolmaz; replay veya dismiss kararı ister.
  • Repair ajanı yalnız öneri üretir; shadow replay ve operatör kararı olmadan production'ı değiştiremez.
  • Retention yalnız UI gizleme değildir; private R2 nesneleri ve D1 referansları dayanıklı Workflow ile uzlaştırılır.