row('BIK','ilan.gov.tr ihale havuzu',raw.bik.status===200&&raw.bik.json?.success?'passed':'blocked',{status:raw.bik.status,source:raw.bik.json?.kaynak||null,loaded:raw.bik.json?.yuklenenIlan??null},'Güncel liste okuması doğrulandı; veri kalitesi D10/D04 kapsamında izlenir.'),
row('TCMB','TCMB döviz satış kurları',tcmbReady?'passed':'blocked',{status:raw.tcmb.status,bulletinDate:raw.tcmb.json?.bulletinDate||null,source:raw.tcmb.json?.source||null,cached:raw.tcmb.json?.cached??null},tcmbReady?'Hata ve eski bülten UX testleri yerel otomasyonda kapsanıyor.':raw.tcmb.error),
row('GOOGLE','Google ile giriş',googleConfigured?'configured':'blocked',{status:raw.google.status,configured:googleConfigured},'Gerçek test hesabıyla giriş, çıkış ve oturum yenileme kabulü gerekli.'),
row('EKAP','EKAP arama ve resmi doküman',raw.okas.status===200?'partial':ekapManualGate?'manual-gate':'blocked',{browserAvailable:raw.documents.json?.tarayiciVar??null,okasStatus:raw.okas.status,okasCode:raw.okas.json?.code||null,d10DocumentCode:'HUMAN_VERIFICATION_REQUIRED'},'Yetkili kullanıcı güvenlik doğrulamasından sonra beş resmi paketi indirip yüklemeli.'),
row('KIK','KİK kurul kararları',raw.kik.status===200&&raw.kik.json?.success?'passed':kikManualGate?'manual-gate':'blocked',{status:raw.kik.status,code:raw.kik.json?.code||null,resultCount:raw.kik.json?.results?.length??null,error:raw.kik.error},raw.kik.status===200?'Bir kararın ayrıntı bağlantısı ayrıca kullanıcı akışında açılmalı.':kikManualGate?'EKAP güvenlik doğrulamasından sonra arama ve karar metni tekrar denenmeli.':'Kaynak erişimi düzeltildikten sonra arama ve karar metni tekrar denenmeli.'),
row('TED','TED Avrupa ihaleleri',raw.ted.status===200&&raw.ted.json?.success?'passed':'blocked',{status:raw.ted.status,totalCount:raw.ted.json?.totalCount??null,timedOut:raw.ted.json?.timedOut??null,error:raw.ted.error},raw.ted.status===200?'Gerçek sonuçlu sorgu ve çeviri, kontrollü AI test bütçesiyle yapılmalı.':'TED kaynağı tekrar denenmeli.'),
row('AI','AI analiz ve teklif yardımcıları',aiConfigured?'configured':'blocked',{status:raw.ai.status,configured:aiConfigured,providerCount:Array.isArray(raw.ai.json?.providers)?raw.ai.json.providers.length:0},'Yetkili test hesabı ve incelemesi tamamlanmış test belgesiyle analiz, soru, taslak ve denetim zinciri gerekli.'),
row('STRIPE','Stripe plan, ödeme ve webhook',billingConfigured&&billingWebhookReady?'configured':'blocked',{status:raw.billing.status,checkoutConfigured:billingConfigured,webhookConfigured:billingWebhookReady,planCount:Array.isArray(raw.billing.json?.plans)?raw.billing.json.plans.length:0},'Yalnız Stripe test ortamında başarılı/başarısız ödeme, webhook tekrarı ve iptal senaryoları gerekli.'),
row('EMAIL','E-posta bildirimleri',guards.emailConfig?.passed?'guarded':'blocked',{unauthenticatedStatus:guards.emailConfig?.status??null},'Yetkili test hesabında yapılandırma okunmalı; izinli test alıcısına tek gönderim ayrıca onaylanmalı.'),
row('TELEGRAM','Telegram bağlantısı ve bildirim',telegramConfigured?'configured':'blocked',{status:raw.telegram.status,configured:telegramConfigured},'Test sohbetinde bağlama kodu ve tek test mesajı için açık gönderim yetkisi gerekli.'),
row('PWA','PWA manifest ve offline worker',raw.manifest.status===200&&raw.serviceWorker.status===200?'passed':'blocked',{manifestStatus:raw.manifest.status,serviceWorkerStatus:raw.serviceWorker.status},'Gerçek cihazda kurulum, offline düzenleme ve yeniden bağlanma kabulü ayrıca izlenir.'),
row('API','API anahtarı, RSS ve MCP',raw.protectedRss.status===401&&raw.mcpGuard.status===401&&guards.apiKeys?.passed?'guarded':'blocked',{apiKeyGuard:guards.apiKeys?.status??null,rssGuard:raw.protectedRss.status,mcpGuard:raw.mcpGuard.status,publicResultsRssStatus:raw.resultsRss.status},'Yetkili test hesabında anahtar oluşturma, RSS/MCP kullanma ve iptal zinciri gerekli.'),
row('SCHEDULER','Zeyilname/sonuç zamanlayıcısı',raw.scheduler.status===200&&raw.scheduler.json?.success?'observable':'blocked',{status:raw.scheduler.status,browserAvailable:raw.scheduler.json?.tarayiciVar??null,resultScanActive:raw.scheduler.json?.sonucTaramasi?.aktif??null,resultScanRunning:raw.scheduler.json?.sonucTaramasi?.calisiyor??null,directProcurementActive:raw.scheduler.json?.dogrudanTemin?.aktif??null,directProcurementRunning:raw.scheduler.json?.dogrudanTemin?.calisiyor??null},'Yetkili test kaydıyla zeyilname/sonuç olayı ve tekrar engeli doğrulanmalı.'),
];
constresult={
checkedAt:newDate().toISOString(),
base,
readOnly:true,
scope:'Yapılandırma, public kaynak okuması ve kimlik doğrulama kapıları denetlendi; giriş, veri değişikliği, AI üretimi, ödeme, mesaj veya teklif gönderimi yapılmadı.',
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.