docs: record D09 integration acceptance

This commit is contained in:
2026-09-15 17:59:32 +03:00
parent 6c32581952
commit 6fda6764c3
3 changed files with 281 additions and 2 deletions
@@ -0,0 +1,43 @@
# D09 dış entegrasyon kabul planı
Son salt okunur canlı tarama: 15 Eylül 2026, `https://ihaleist.com`.
Bu plan, dış sistemlerde yan etki oluşturmayan kontrolleri tamamlananlardan ayırır. Ödeme, e-posta, Telegram mesajı ve resmi teklif gönderimi yalnız yetkili test verileri ve açık işlem yetkisiyle yapılır. EKAP güvenlik doğrulaması otomasyonla aşılmaz.
## Mevcut durum
| Entegrasyon | Canlı durum | Doğrulanan kanıt | Kapatma adımı |
| --- | --- | --- | --- |
| ilan.gov.tr / BİK | Geçti | HTTP 200, kaynak `ilan.gov.tr`, 3.258 kayıt | D10/D04 veri kalitesi izlemesi dışında D09 işi yok |
| TCMB | Geçti | HTTP 200, 15.09.2026 bülteni ve kaynak URL’si | D09 için kapalı |
| Google ile giriş | Yapılandırılmış | Public config `configured: true` | Test hesabıyla giriş, çıkış ve oturum yenileme |
| EKAP resmi doküman | İnsan doğrulaması | OKAS ve D10 belge isteği HTTP 428, `HUMAN_VERIFICATION_REQUIRED` | Yetkili kullanıcı CAPTCHA’yı tamamlayıp beş resmi paketi indirir; dosyalar uygulamaya yüklenir |
| KİK kurul kararları | İnsan doğrulaması | HTTP 428, doğru hata kodu ve kullanıcı yönlendirmesi | EKAP doğrulamasından sonra arama ve karar metni tekrar denenir |
| TED | Geçti | HTTP 200, zaman aşımı yok | Gerçek sonuçlu sorgu ve çeviri kontrollü AI test bütçesiyle doğrulanır |
| AI yardımcıları | Yapılandırılmış | 7 sağlayıcı hazır | Yetkili test hesabı ve incelenmiş test belgesiyle analiz, soru, taslak ve denetim zinciri |
| Stripe | Yapılandırılmış | Checkout ve webhook hazır, 3 plan | Stripe test modunda başarılı/başarısız ödeme, webhook tekrar teslimi ve iptal |
| E-posta | Kimlik doğrulamayla korumalı | Yetkisiz config isteği HTTP 401 | Yetkili hesapla config okuma; izinli test alıcısına tek gönderim |
| Telegram | Engelli | Public config `configured: false` | Bot/chat yapılandırması, bağlama kodu ve izinli test sohbetine tek mesaj |
| PWA / offline worker | Geçti | Manifest ve service worker HTTP 200 | Gerçek cihazda kurulum, offline düzenleme, yeniden bağlanma ve kuyruk boşalması |
| API / RSS / MCP | Kimlik doğrulamayla korumalı | API key ve RSS 401; MCP artık proxy üzerinden 401; public sonuç RSS 200 | Yetkili hesapla anahtar oluşturma, kullanma, iptal ve iptal sonrası 401 |
| Zeyilname/sonuç zamanlayıcısı | Gözlemlenebilir | Durum uç noktası 200; iki worker etkin | Kontrollü test kaydıyla olay üretme, tek teslim ve tekrar engeli |
Canlı özet: 13 entegrasyonun 4’ü geçti, 3’ü yapılandırılmış, 2’si kimlik doğrulamayla korumalı, 1’i gözlemlenebilir, 2’si insan doğrulaması bekliyor ve 1’i yapılandırılmadığı için engelli. Korunan 14 uç noktanın 14’ü yetkisiz isteği reddetti.
## Uygulama sırası
1. **Hesap ve erişim kabulü:** Google oturumu ile API anahtarı oluşturma/kullanma/iptal zincirini aynı test hesabında doğrula.
2. **EKAP/KİK ve D10:** Yetkili kullanıcı doğrulamasından sonra beş resmi paketi yükle; her ihale için belge gereksinimi, ürün uygunluğu, firma dosyası, fiyat ve çıktı kapılarını kaydet.
3. **AI/TED:** Yalnız incelenmiş test belgesiyle gerçek sonuçlu TED araması, çeviri, analiz, belgeye soru, taslak ve denetim çıktısını kaynak atıflarıyla karşılaştır.
4. **Bildirimler:** E-posta yapılandırmasını oku; izinli test adresi ve Telegram sohbetinde tek gönderimi, hata kaydı ve tekrar engeliyle doğrula.
5. **Stripe:** Test modunda başarı, ret, iptal ve aynı webhook’un tekrar tesliminde tek abonelik değişikliği oluştuğunu doğrula.
6. **PWA ve zamanlayıcı:** Gerçek cihazı offline yap, bir düzenlemeyi kuyruğa al, yeniden bağlanınca tek kez uygulandığını doğrula; ardından kontrollü zeyilname/sonuç olayını çalıştır.
Her adımda kabul kanıtı; zaman, test hesabı kimliği, kullanılan kayıt/İKN, HTTP sonucu, ekrandaki kullanıcı mesajı ve oluşan veri değişikliğini içermelidir. Başarısız veya yapılandırılmamış entegrasyon tamamlandı olarak işaretlenmez.
## Bu sürümde düzeltilen iki hata
- Nginx, `/mcp` POST isteğini statik dosya gibi ele alıp 405 döndürüyordu. İstek artık Node API’ye proxy ediliyor ve yetkisiz çağrı doğru biçimde 401 dönüyor.
- KİK, OKAS ve ürün aramalarındaki EKAP HTTP 428 yanıtı genel 502’ye çevriliyordu. Yanıt artık `HUMAN_VERIFICATION_REQUIRED`, `retryable: false` ve kullanıcıya uygulanabilir yönlendirme içeriyor.
Makine tarafından üretilen kanıt: [`qa-live-d09-integrations.json`](evidence/qa-live-d09-integrations.json).
@@ -0,0 +1,224 @@
{
"checkedAt": "2026-09-15T14:58:12.437Z",
"base": "https://ihaleist.com",
"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ı.",
"integrations": [
{
"id": "BIK",
"label": "ilan.gov.tr ihale havuzu",
"status": "passed",
"evidence": {
"status": 200,
"source": "ilan.gov.tr",
"loaded": 3258
},
"remaining": "Güncel liste okuması doğrulandı; veri kalitesi D10/D04 kapsamında izlenir."
},
{
"id": "TCMB",
"label": "TCMB döviz satış kurları",
"status": "passed",
"evidence": {
"status": 200,
"bulletinDate": "15.09.2026",
"source": "https://www.tcmb.gov.tr/kurlar/today.xml",
"cached": false
},
"remaining": "Hata ve eski bülten UX testleri yerel otomasyonda kapsanıyor."
},
{
"id": "GOOGLE",
"label": "Google ile giriş",
"status": "configured",
"evidence": {
"status": 200,
"configured": true
},
"remaining": "Gerçek test hesabıyla giriş, çıkış ve oturum yenileme kabulü gerekli."
},
{
"id": "EKAP",
"label": "EKAP arama ve resmi doküman",
"status": "manual-gate",
"evidence": {
"browserAvailable": true,
"okasStatus": 428,
"okasCode": "HUMAN_VERIFICATION_REQUIRED",
"d10DocumentCode": "HUMAN_VERIFICATION_REQUIRED"
},
"remaining": "Yetkili kullanıcı güvenlik doğrulamasından sonra beş resmi paketi indirip yüklemeli."
},
{
"id": "KIK",
"label": "KİK kurul kararları",
"status": "manual-gate",
"evidence": {
"status": 428,
"code": "HUMAN_VERIFICATION_REQUIRED",
"resultCount": null,
"error": "EKAP güvenlik doğrulaması gerekiyor. EKAP’ı kendi tarayıcınızda açıp doğrulamayı tamamlayın; ardından indirdiğiniz dokümanı bu ihaleye yükleyin."
},
"remaining": "EKAP güvenlik doğrulamasından sonra arama ve karar metni tekrar denenmeli."
},
{
"id": "TED",
"label": "TED Avrupa ihaleleri",
"status": "passed",
"evidence": {
"status": 200,
"totalCount": 0,
"timedOut": false,
"error": null
},
"remaining": "Gerçek sonuçlu sorgu ve çeviri, kontrollü AI test bütçesiyle yapılmalı."
},
{
"id": "AI",
"label": "AI analiz ve teklif yardımcıları",
"status": "configured",
"evidence": {
"status": 200,
"configured": true,
"providerCount": 7
},
"remaining": "Yetkili test hesabı ve incelemesi tamamlanmış test belgesiyle analiz, soru, taslak ve denetim zinciri gerekli."
},
{
"id": "STRIPE",
"label": "Stripe plan, ödeme ve webhook",
"status": "configured",
"evidence": {
"status": 200,
"checkoutConfigured": true,
"webhookConfigured": true,
"planCount": 3
},
"remaining": "Yalnız Stripe test ortamında başarılı/başarısız ödeme, webhook tekrarı ve iptal senaryoları gerekli."
},
{
"id": "EMAIL",
"label": "E-posta bildirimleri",
"status": "guarded",
"evidence": {
"unauthenticatedStatus": 401
},
"remaining": "Yetkili test hesabında yapılandırma okunmalı; izinli test alıcısına tek gönderim ayrıca onaylanmalı."
},
{
"id": "TELEGRAM",
"label": "Telegram bağlantısı ve bildirim",
"status": "blocked",
"evidence": {
"status": 200,
"configured": false
},
"remaining": "Test sohbetinde bağlama kodu ve tek test mesajı için açık gönderim yetkisi gerekli."
},
{
"id": "PWA",
"label": "PWA manifest ve offline worker",
"status": "passed",
"evidence": {
"manifestStatus": 200,
"serviceWorkerStatus": 200
},
"remaining": "Gerçek cihazda kurulum, offline düzenleme ve yeniden bağlanma kabulü ayrıca izlenir."
},
{
"id": "API",
"label": "API anahtarı, RSS ve MCP",
"status": "guarded",
"evidence": {
"apiKeyGuard": 401,
"rssGuard": 401,
"mcpGuard": 401,
"publicResultsRssStatus": 200
},
"remaining": "Yetkili test hesabında anahtar oluşturma, RSS/MCP kullanma ve iptal zinciri gerekli."
},
{
"id": "SCHEDULER",
"label": "Zeyilname/sonuç zamanlayıcısı",
"status": "observable",
"evidence": {
"status": 200,
"browserAvailable": true,
"resultScanActive": true,
"resultScanRunning": false,
"directProcurementActive": true,
"directProcurementRunning": false
},
"remaining": "Yetkili test kaydıyla zeyilname/sonuç olayı ve tekrar engeli doğrulanmalı."
}
],
"guards": {
"authSession": {
"status": 401,
"passed": true
},
"documents": {
"status": 401,
"passed": true
},
"documentText": {
"status": 401,
"passed": true
},
"apiKeys": {
"status": 401,
"passed": true
},
"emailConfig": {
"status": 401,
"passed": true
},
"plan": {
"status": 401,
"passed": true
},
"subscriptions": {
"status": 401,
"passed": true
},
"sourceHistory": {
"status": 401,
"passed": true
},
"companyScan": {
"status": 401,
"passed": true
},
"aiAnalyze": {
"status": 401,
"passed": true
},
"checkout": {
"status": 401,
"passed": true
},
"emailSend": {
"status": 401,
"passed": true
},
"telegramMutation": {
"status": 401,
"passed": true
},
"notificationRun": {
"status": 403,
"passed": true
}
},
"summary": {
"total": 13,
"passed": 4,
"configured": 3,
"guarded": 2,
"observable": 1,
"manualGate": 2,
"blocked": 1,
"protectedGuardsPassed": 14,
"protectedGuardsTotal": 14
}
}
+14 -2
View File
@@ -10,9 +10,21 @@
Bu aşamada D10 tamamlanmış değildir. Kapanış için yetkili kullanıcının EKAP güvenlik doğrulamasından sonra beş resmi doküman paketini indirip uygulamaya yüklemesi ve test firmasının gerçek ürün/belge kayıtlarıyla kalan dört kapıyı geçmesi gerekir. Resmi teklif gönderilmedi.
6 Eylül 2026. Temel sürüm: 909ebae. Çalışma dalı: codex/ihaleist-duzeltme-plani.
## 15 Eylül 2026 D09 dış entegrasyon kabulü
Planın tamamı henüz bitmedi. Canlı yayın yapılmadı.
- `6c32581` sürümü Coolify üzerinden üretime alındı. Canlı `/api/version` tam commit SHA’sını ve beklenen frontend asset SHA-256 özetini döndürdü; health, ready ve güvenlik başlıkları kabulü geçti.
- Salt okunur probda 13 entegrasyon denetlendi: 4 geçti, 3 yapılandırılmış, 2 kimlik doğrulamayla korumalı, 1 gözlemlenebilir, 2 insan doğrulaması bekliyor ve 1 engelli. Yetkisiz istek kapılarının 14/14’ü doğru şekilde reddedildi.
- BİK, TCMB, TED bağlantısı ve PWA assetleri geçti. Google, AI ve Stripe yapılandırılmış. E-posta ile API/RSS/MCP doğru kimlik doğrulama kapısında. Scheduler durumu okunuyor. EKAP/KİK güvenlik doğrulaması bekliyor. Telegram yapılandırılmamış tek engelli entegrasyondur.
- `/mcp` POST isteğinin Nginx’te 405’e düşmesi düzeltildi; canlıda artık Node kimlik doğrulama katmanından 401 dönüyor. KİK/OKAS/ürün aramasındaki HTTP 428 yanıtının genel 502’ye çevrilmesi de giderildi.
- Test, giriş yapmadı; AI üretimi, ödeme, e-posta/Telegram mesajı veya resmi teklif göndermedi. Yan etkili kapanış adımları yetkili test hesapları ve açık işlem yetkisiyle ayrı ayrı uygulanacaktır.
Ayrıntılı sıra ve kabul ölçütleri: [`d09-entegrasyon-kabul-plani.md`](d09-entegrasyon-kabul-plani.md). Canlı kanıt: [`qa-live-d09-integrations.json`](evidence/qa-live-d09-integrations.json).
## 6 Eylül 2026 başlangıç durumu
Temel sürüm: 909ebae. Çalışma dalı: codex/ihaleist-duzeltme-plani. Bu bölüm tarihsel başlangıç kaydıdır.
Planın tamamı o tarihte henüz bitmemişti ve canlı yayın yapılmamıştı.
Canlı read-only probe (6 Eylül 2026) `/api/health` için 200 döndürürken `/api/ready` için 404 döndü; canlı API yanıtında yeni güvenlik başlıkları da yok. Bu, yerel dalın henüz `ihaleist.com` ortamına dağıtılmadığını doğruluyor. Kanıt: [`qa-live-runtime.json`](evidence/qa-live-runtime.json). Probe sırasında giriş, veri değişikliği, ödeme, mesaj veya ihale başvurusu yapılmadı.