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ı
- 01
Cron ve politika
Kaynak başına altı saatlik ofset; source policy tek başına yayın izni değildir.
- 02
Kaynağa özel Workflow
Aynı teslim ikinci acquisition açmasın diye deterministik run ve instance kimliği.
- 03
Sınırlı fetch
İzinli host, timeout, hız ve bütçe. Challenge veya 403 görülürse genişleme durur.
- 04
Deterministik extractor
Şema doğrulaması ve her olgu için fieldEvidence; tarih ya da mekân tahmin edilmez.
- 05
Private R2
Ham cevap, redakte artifact ve hashli manifest. Manifest her zaman en son yazılır.
- 06
COMMIT_QUEUE
Payload yerine yalnız manifest anahtarı ve hash taşınır.
- 07
Queue consumer
Run, URL, manifest, hash ve extraction zinciri yeniden doğrulanır.
- 08
D1 kontrol düzlemi
Run, attempt, source record, observation, candidate, incident ve karar izi.
- 09
Yayın kapısı
Kaynak profili, active admission, güncellik, İstanbul ve sabit evidence yolları birlikte geçer.
- 10
Canonical D1
Doğrulanmış event, occurrence, venue, source link ve revision.
- 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.
- 01Cron
scheduledTime ve sourceId ile doğru Workflow'u çağırır.
- 02Workflow
Deterministik workflow/run kimliğini üretir.
- 03D1
createOrGetRun ile yeni ya da mevcut queued run'ı döndürür.
- 04Kaynak
Yalnız önceden tanımlı liste veya detay yüzeyi sınırlı biçimde fetch edilir.
- 05Extractor
HTML, JSON, JSON-LD veya ACF verisini şemaya ve fieldEvidence'a dönüştürür.
- 06Private R2
Artifact'lar yazılır ve her nesnenin SHA-256 özeti alınır.
- 07Private R2
Manifest, paket tamamlandıktan sonra en son yazılır.
- 08COMMIT_QUEUE
evidence_committed(runId, manifestKey, manifestHash) teslim edilir.
- 09Consumer
Manifest ile artifact zincirini R2'den yeniden okur ve doğrular.
- 10D1
Attempt, artifact index, record, observation ve candidate batch yazılır.
- 11Detay fan-out
Inventory detay istiyorsa detail_requested işleri bütçeli batch'lere ayrılır.
- 12Trusted gate
Profil, admission, evidence yolları ve güncellik denetlenir.
- 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
- queued → captured: kanıt yakalandı
- queued → quarantined: review gerekli
- queued → failed: terminal acquisition
- captured/quarantined → kendisi: aynı manifest replay
Candidate
- yeni → quarantined
- quarantined → approved: factual review
- quarantined → rejected
- approved → published
- published → published: yeni gözlem
Withdrawal
- pending → applied: public kayıt çekildi
- applied → purging: private scope bulundu
- purging → purged: R2 ve D1 reconcile tamam
- 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.
| Katman | Ne tutar? | Yetkili olduğu konu | Public mi? |
|---|---|---|---|
| Workflow belleği | O anki HTTP cevabı ve ara değerler | Geçici çalışma alanı | Hayır |
| Private R2 / EVIDENCE | Raw response, redakte artifact, trace ve manifest | Kaynak o anda ne söyledi? | Hayır |
| D1 control plane | Run, attempt, record, observation, candidate, incident ve DLQ | İşlem geçmişi ve operatör kararı | Hayır |
| Canonical D1 | Event, occurrence, venue, source link, revision ve media ledger | Public üründe gösterilebilir doğrulanmış olgular | Worker üzerinden |
| Public R2 / PUBLIC_MEDIA | Hak incelemesi geçmiş event ve venue görsel byte'ları | Hashli public medya nesnesi | Worker üzerinden |
| Public DTO / HTML | Başlık, tarih, saat, mekân, kategori, fiyat, kaynak, freshness ve medya provenance | Okuyucunun daraltılmış sözleşmesi | Evet |
| Hermes staging corpus | reference_only legacy kayıtlar | Yeniden doğrulanacak iş listesi | Hayı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 acquisition | Workflow retry 0; timeout 15 dakika | Aynı yüzeyi tekrar fetch edip kaynağa yük bindirmemek ve run altında kanıt çakıştırmamak |
| Kültür structured fetch | Yalnız sınıflandırılmış fallback-eligible hatada browser | Her HTTP hatasını challenge aşma girişimine çevirmemek |
| Evidence commit | En fazla 3 retry; 30–900 saniye exponential delay | Dış kaynağı tekrar fetch etmeden geçici R2/D1 hatasını iyileştirmek |
| Retry tükenen mesaj | Dead letter indeksine yazılır | Mesaj kaybolmaz; Access arkasından replay ya da dismiss gerekir |
| Extraction / recipe | Yalnız shadow replay ve operatör kararı | Repair ajanı üretimi doğrudan değiştiremez |
| Owner withdrawal | Kalıcı tombstone ve dayanıklı purge | Kayıt yeni kanıtla geri gelemez |
| Retention withdrawal | Purge bitince geçici fence kalkar | Tekrarlayan 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.
- 01
Paylaşılabilir URL
q, window, date, category, district, time, price ve cursor
- 02
Strict parser
Şehir ve izinli değer sınırları
- 03
D1 feed CTE
Published event + occurrence ve candidate_publications şartı
- 04
SQL filtreleri
İstanbul, tarih, yerel saat, kategori, semt, fiyat ve arama
- 05
Occurrence seçimi
Event başına en yakın yayınlanmış gösterim
- 06
Deterministik sayfa
startsAt + eventId sırası ve limit + 1
- 07
Astro SSR
Semantik kartlar ve normal Daha fazla bağlantısı
- 08
Infinite scroll
IntersectionObserver 700 px kala aynı URL'yi fetch eder
- 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.
- 01
Hak incelemesi
Etkinlik ya da mekânı tasvir etme hakkı, attribution ve rights statement birlikte kaydedilir.
- 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.
- 03
Content identity
SHA-256 hash event veya venue kimliğiyle birleşir; hotlink yerine Napsak kontrollü nesne anahtarı oluşur.
- 04
Public media R2
Yalnız incelemesi geçen byte'lar PUBLIC_MEDIA bucket'ına yazılır; private EVIDENCE ile karışmaz.
- 05
Ayrı ledger
event_media_assets belirli etkinliği, venue_media_assets yalnız canonical mekânı temsil eder.
- 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.
| Kaynak | Cron | Okunan yüzey | Detay stratejisi |
|---|---|---|---|
| Kültür.İstanbul | 23 */6 * * * | Yapılandırılmış etkinlik cevabı | Uygun hatada kontrollü browser fallback |
| Biletinial | 41 */6 * * * | Kategori ve şehir listeleri | Görülmemiş İstanbul kartlarına öncelikli bütçeli detay |
| Nardis | 53 */6 * * * | WordPress REST inventory | Kaynak kayıtları için bütçeli detay |
| SALT | 07 */6 * * * | Program kartları | Kart yeterli olduğu için detay yok |
| Zorlu PSM | 31 */6 * * * | Yakın program + ?date=YYYY-MM-DD | Kart yeterli olduğu için detay yok |
| Müze Gazhane | 19 */6 * * * | WordPress REST ACF | Gelecek 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.
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.
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ı.
Onboarding çok kayıtlı
Extractor union, Workflow binding/cron, doctor haritası, source policy, trusted profile ve admission birlikte eklenmeli.
Arama SQL tabanlı
Bugünkü katalog için yeterli. Ayrı indeks ancak LIKE/facet CTE maliyeti ölçüldüğünde düşünülmeli.
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.