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. 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ı. 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ı.