docs: record D09 integration acceptance
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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ı.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user