994 lines
158 KiB
Markdown
994 lines
158 KiB
Markdown
# Düzeltme planı — uygulama durumu
|
||
|
||
6 Eylül 2026. Temel sürüm: 909ebae. Çalışma dalı: codex/ihaleist-duzeltme-plani.
|
||
|
||
Planın tamamı henüz bitmedi. Canlı yayın yapılmadı.
|
||
|
||
## Kanıtlanan ilk değişiklikler
|
||
|
||
- Eski belgeler tablosunda ikn indeksi kolon migration'ından önce oluşuyordu. Transaction içinde kolonlar önce ekleniyor; eski belgeyi koruyan, tekrarlanabilir migration testi geçti.
|
||
- Veri deposu hataları artık boş hesap veya başarılı yazma gibi yutulmuyor.
|
||
- İhale başına kullanıcıya ait hazırlık durumu, snapshot ve sürüm saklanıyor. Yeni API sürüm çakışmasında 409 döndürüyor. İki kullanıcı ve beş kayıt testi geçti.
|
||
- Arayüz görev/takip/atama/not işlemlerini sunucu onayıyla güncelliyor. İzole tarayıcı testinde beş sentetik ihale görevi yenilemeden sonra Kanban’da korundu; atama/not ve yeniden giriş kabulü ayrıca bekliyor.
|
||
- ICS sabit tarih kullanmıyor. Beş tarih, yıl geçişi, artık gün, geçersiz tarih ve UTF-8 katlama testleri geçti.
|
||
- Uydurma 150 TL fiyat/sürüklenen kaşe simülatörü gerçek hazırlık formuyla değiştirildi. Boş kalem, fiyat, süre ve firma kontrolleri eklendi. Bu alanlarda görsel/işlevsel test bekliyor.
|
||
- Şehir filtresi mevcut 81 il tablosundan besleniyor.
|
||
|
||
## İkinci değişiklik paketi
|
||
|
||
- Tam ilan metnindeki 4.000 karakter sınırı kaldırıldı; saat/teslimat gibi alanlar kaynak metinden çıkarılıyor. Sentetik uzun metin testi geçti; beş resmi metinle kabul bekliyor.
|
||
- DT kayıtları kurum ve kimlik ile tekilleştiriliyor, kaynak kimlikleri korunuyor. Farklı sözleşme kısımları birleştirilmiyor. Mevcut kullanıcı referanslarının toplu dönüşümü hâlâ açık.
|
||
- Cetvel miktar/birim ayrıştırması ve para yuvarlaması ortak yardımcıya taşındı. Eksik fiyat engeli, Türkçe sayı ve 100 satırlık yazdırılabilir HTML testi geçti. Gerçek PDF sayfalama testi yerine geçmez.
|
||
- Firma, fiyatlar, süre ve teklif türü hazırlık taslağı olarak sunucuya kaydedilebiliyor. HTTP testinde kimlik doğrulama, hesap ayrımı, kalıcılık ve eski sürüme 409 yanıtı doğrulandı. Formun tarayıcıda yeniden yüklenmesi ayrıca test edilmeli.
|
||
- Sabit kurlar kaldırıldı; TCMB döviz satış kuru bülten tarihi ve kaynakla gösteriliyor. Kaynak hatasında uydurma değer üretilmiyor. Kategori tutarından birim fiyat önerisi ve kesin eşleşme garantisi kaldırıldı.
|
||
- Belge okuyucularının `metin`/`text` uyumsuzluğu giderildi. Bu, AI kaynak çelişkilerinin tamamının çözüldüğü anlamına gelmiyor; sürümlü ortak model açık.
|
||
- Ürün arama sonuçları son çalıştırılan sorguya bağlı. Sonraki/önceki sayfa aynı sorguyu kullanıyor; düzenlenmiş alanlar için önceki sonuç uyarısı gösteriliyor. Kapanan aramanın geç yanıtı yok sayılıyor ve yüklenme durumu sıfırlanıyor. Etkileşimli regresyon testi bekliyor.
|
||
- `tests/browser-qa.mjs` localhost üzerinde geçici hesap/veritabanı ve açıkça sentetik beş ilanla test ortamı sağlar. Üretim giriş mekanizmasına eklenmez.
|
||
|
||
Tarayıcı kanıtı: [Yenileme sonrası beş kart](evidence/qa-kanban-after-reload.png), [ekran metni](evidence/qa-kanban-after-reload.txt). Bu kanıt gerçek beş ihale dokümanıyla başvuru kabulü değildir.
|
||
|
||
## Kaynak değişikliği ve fiyat koruması
|
||
|
||
- Fiyatlar dizi sırasından bağımsız, kalem kimliği/içeriğine bağlı saklanır. Sıralama değişimi fiyatı başka ürüne taşımaz; miktar veya teknik özellik değişince eski fiyat yeni satıra uygulanmaz.
|
||
- Kaynak ilan, tarih/saat, kalemler ve belge gereksinimleri için karşılaştırılabilir bir içerik kaydı tutulur. Kaynak değişince resmi dokümanla karşılaştırma onayı geçersiz olur, çıktı yeniden kontrol bekler.
|
||
- Eski konumsal fiyatlar kaynak satırları olmadan güvenle eşlenemediği için otomatik taşınmaz; kullanıcıya yeniden giriş gerektiği gösterilir. Bu davranış yeni taslak kaydında da korunur.
|
||
- Üç regresyon testi sıralama, içerik değişikliği ve eski taslak senaryolarını doğrular. Henüz gerçek belge yükleme/zeyilname ve tarayıcı form kabulü tamamlanmadı. Bu kontrol tüm belge/AI kaynak sürüm modelinin yerine geçmez.
|
||
|
||
## Belge ve sağlık ürünü kontrolleri
|
||
|
||
- Hazırlık formunda kaynak maddeli belge gereksinimi ekleme/kaldırma, belge adı/sürümü ve geçerlilik kontrolü kaydı eklendi. Zorunlu belgeye uygulanmıyor denilerek çıktı engeli aşılamaz.
|
||
- Kalem bazında ürün/model veya hizmet kapsamı, teknik uygunluk kaynağı, sorumlu, ÜTS, numune/demonstrasyon, servis/kurulum ve teslimat kontrolleri bulunur. Uygulanmıyor seçimi gerekçe ister; uygun olmayan ürün çıktıyı engeller.
|
||
- Eksik kontrollerin listesi fiyatlandırma ekranında görünür. Bu alanlar kullanıcı beyanı/kontrol kaydıdır; belge deposundaki gerçek dosyaya otomatik bağlantı ve resmi yeterlik doğrulaması henüz yoktur.
|
||
- Kontroller, elle eklenen belgeler ve analizden gelen kalem/belge listesi taslakla saklanır. HTTP testi bu alanların hesap içinde yazılıp geri okunmasını doğrular. Üç kural testi eksik kaynak, uygun olmayan ürün, zorunlu belgenin atlanması ve değişmiş gereksinimleri kapsar.
|
||
- Tarayıcıda tüm bu alanları doldurma, yenileme ve çok kalemli kullanılabilirlik kabulü bekliyor. AI raporundaki eski yerel belge işaretleri kaldırıldı; rapor kalıcı hazırlık kaydını özetler ve kontrol formuna yönlendirir. D06/D07 tamamlanmış sayılmaz.
|
||
|
||
## Ekranlar arası kayıt tutarlılığı
|
||
|
||
- Derin rapor belge listesi artık geçici tamamlandı işaretleri tutmaz; kayıtlı kullanıcı kontrollerini gösterir ve kaynaklı hazırlık formuna geçiş sağlar.
|
||
- Yol haritası tamamlanma durumu ihale checklist kaydında sunucu onayıyla saklanır. Eylem veya kaynak değişince eski işaret tamamlanmış sayılmaz. Kaydetme hatası görünürdür.
|
||
- Derin rapor ve hazırlık formu, açılışta seçilmiş eski nesne yerine ihale havuzundaki güncel kullanıcı kaydını okur. Böylece AI penceresinden tekrar açılan formda yeni kaydedilmiş taslağa erişilir.
|
||
- HTTP testinde yol haritası kaynak/durum alanlarının yazma-okuma kontrolü eklendi. Arayüzde iki pencere arasında geçiş ve yeniden giriş senaryosu hâlâ ayrıca doğrulanmalıdır.
|
||
|
||
## Hesap ve oturum ayrımı
|
||
|
||
- Firma profili, ekip, favoriler ve filtreler ortak localStorage kayıtlarından başlatılmıyor; yeni hesaba boş varsayılanlar ve ardından sunucudaki kendi kaydı yükleniyor. Önceki hesaba ait eksik alanlar yeni profille birleştirilmiyor.
|
||
- Ortak ihale önbelleği yalnız kamuya açık ihale alanlarını tutar; not, checklist, takip ve teklif taslağı çıkarılır. Eski önbellek okunurken de bu alanlar temizlenir. Eski yerel kayıtlar otomatik başka hesaba aktarılmaz.
|
||
- Oturum geri yükleme, kayıt/hata, plan, analiz, firma taraması ve bildirim yanıtları oturum değişmişse yeni hesaba uygulanmaz. Başka sekmedeki oturum değişikliği dinlenir. Ziyaret ve belge uyarısı anahtarları hesaba ayrılır.
|
||
- İki regresyon testi eski oturum yanıtının yeni hesabı silememesini/değiştirememesini ve ortak ihale önbelleğinin özel hazırlık durumunu taşımamasını doğrular. Tarayıcıda iki gerçek test hesabı ve offline senaryosu ayrıca kabul edilmeli. Bu değişiklik, özel profil verisinin offline erişimini sunucu senkronu tamamlanana kadar sınırlar.
|
||
|
||
## Ortak tarih ve aylık takvim
|
||
|
||
- Kanban ve yaklaşan tarihler aynı Türkiye saati/gün hesabını kullanır. Aynı günün geçmiş saatleri artık yaklaşan listesinde açık gibi görünmez; saati bilinmeyen kayıtta belirsizlik açıkça belirtilir.
|
||
- Takvim ay seçimine açıldı; 22 Eylül gibi ilk yedi gün dışındaki adaylara erişilir. Ay uzunluğu/artık gün ve boş gün durumu ele alındı. Takvim kartı klavyeyle açılır.
|
||
- Açık kalan Kanban, sağ panel ve takvim tarih etiketleri 30 saniyede bir güncellenir. Ürün aramasındaki geçmiş tarih filtresi aynı kaynak saatini kullanır; filtre etiketi bilinmeyen saati başvuruya açık garantisi gibi sunmaz.
|
||
- Üç tarih testi gün farkını, Türkiye'de yıl/gece geçişini, tam kapanış anını, eksik saat ve artık günleri doğrular. Google/Outlook gerçek içe aktarımı, zeyilname güncellemesi ve bütün sunucu bildirim zamanlayıcıları henüz bu kapsamda doğrulanmadı.
|
||
|
||
## Tarayıcı doğrulaması ve virgüllü fiyat hatası
|
||
|
||
- Geçici normal hesapla Giresun adlı sentetik kayıtta firma alanları, 120 gün, fiyat ve manuel belge gereksinimi dolduruldu; kaydetme/yenileme sonrası geri geldi. Eksik kontroller varken çıktı düğmeleri kapalı kaldı.
|
||
- Ürün modeli, teknik kaynak, belge doğrulaması, sorumlu ve dört sağlık yükümlülüğü kontrolü kaydedilip yenilemeden sonra ekrandan doğrulandı. Resmi kaynak onayı verilmedi; gerçek başvuru veya resmi uygunluk iddiası yok.
|
||
- Tarayıcı testi yeni P1 kusuru ortaya çıkardı: `125,50` girdisi virgül silinerek `12550` oluyordu. Girdi artık değiştirilmeden ortak fiyat ayrıştırıcısına gider; nokta/virgül ondalığı desteklenir, geçersiz metin reddedilir. PDF HTML'sinde de aynı ayrıştırıcı kullanılır, birim fiyat hassasiyeti korunur.
|
||
- Düzeltme sonrasında tarayıcıda `125,50 × 2 = 251,00 TL` görüldü ve yeniden yüklemede korundu. Bir otomatik test ekran hesabı/PDF HTML tutarlılığı, geçersiz sayı ve aşırı tutarı kapsar.
|
||
- Kanıtlar: [taslak yenilemesi](evidence/qa-draft-after-reload.txt), [virgüllü fiyat](evidence/qa-turkish-price-fixed.txt), [kontrol yenilemesi](evidence/qa-checks-after-reload.txt).
|
||
|
||
## Kısmi teklif hazırlığı
|
||
|
||
- Kısmi teklif izninin doküman/madde kaydı, resmi kısım eşleştirmesi ve kısım seçimi eklendi. Bilinmeyen kısım otomatik tahmin edilmez; kaynakta kısım varsa kullanıcı üzerine yazamaz.
|
||
- Aynı kısma ait tüm satırlar birlikte seçilir. Yalnız seçili satırlar fiyat, ürün uygunluğu ve cetvel çıktısına girer. Kısım değişince kaynak karşılaştırması yeniden gerekir; önceki fiyatlar kendi satırında korunur.
|
||
- Seçim, eşleştirmeler ve izin kaynağı hazırlık taslağına kaydedilir. Eski seçili kısım güncel kaynakta yoksa çıktı engellenir.
|
||
- İki test seçilmeyen 1.000 TL cihazın 80 TL'lik seçili cetvele karışmamasını, eksik kaynak/eşleştirme ve kaybolan kısım engellerini doğrular. Tarayıcıda tek sentetik satır için boş seçim engeli, kısım eşleştirmesi ve seçili fiyat gösterimi doğrulandı: [kanıt](evidence/qa-lot-selection.txt).
|
||
- Aksaray'ın gerçek 34 kısmının resmi dokümanıyla karşılaştırma ve çok kısımlı tarayıcı kabulü henüz yoktur. Götürü bedel tutarı kullanıcı tarafından seçilen kapsam için ayrıca girilir.
|
||
|
||
## Belge deposu ile hazırlık bağlantısı
|
||
|
||
- Belge gereksinimleri hesaba ait gerçek depo dosyasına bağlanır. Dosya kimliği ve oluşturma/boyut/son kullanma bilgileri kontrol kaydında tutulur; dosya değişikliği yeniden kontrol gerektirir.
|
||
- Dosya listesi fiziksel dosyanın mevcut olup olmadığını bildirir; sunucu dosya yolu istemciye verilmez. Kayıp/erişilemeyen dosya veya ihale tarihinde geçersiz belge çıktı koşullarını karşılamaz.
|
||
- Hazırlık formunda dosya seçimi, indirme, liste yenileme ve yüklenme/hata durumları bulunur. Çıktı isteğinde dosyalar tekrar sunucudan kontrol edilir. Dosya türüne göre içerik/ÜTS/mevzuat doğrulaması yapılmış sayılmaz.
|
||
- Yeni HTTP testi gerçek baytlarla yükleme → listeleme → indirme → üst veri değiştirme → silme zincirini ve başka hesabın indirme isteğine 404'ü doğrular. Bir kural testi kayıp dosya, değişmiş bilgi, süresi dolmuş ve geçersiz tarih senaryolarını kapsar.
|
||
- Tarayıcı üzerinden dosya seçme/indirme ve son kontrol sonrası yazdırma davranışı, özellikle yeni pencere engeli, henüz doğrulanmalı. Bu çalışma D01/D07 belge bağlantısını ilerletir; OCR ve beş gerçek dosya kabulünü kapatmaz.
|
||
|
||
## Doğrulama
|
||
|
||
`npm test`: 46/46 geçti (son yeniden çalıştırma: 6 Eylül 2026).
|
||
`npm run build`: geçti; mevcut büyük paket/dinamik import uyarıları sürüyor.
|
||
`node --check server/index.js`, `node --check server/user-store.mjs`, `git diff --check`: geçti.
|
||
|
||
## Tamamlanacak işler (orijinal kapsam korunuyor)
|
||
|
||
- D01: kontrollü test API ortamı; arayüz kalıcılığı, hesap geçişi/önbellek ayrımı, tüm checklist/inceleme yolları, eski takiplerin aktarımı, dosya yaşam döngüsü. Production şema ve yedek/geri yükleme henüz doğrulanmadı.
|
||
- D02: tüm kart/saat/geri sayım/takvim alanlarını ortak tarih modeline geçirmek; gerçek takvim içe aktarımı ve zeyilname güncellemesi.
|
||
- D03: cetvel/form kalıcılığı, ortak miktar/para hesaplaması, çok sayfalı Türkçe PDF/Excel testleri; eski kullanılmayan PDF üreticisinin kaldırılması veya düzeltilmesi.
|
||
- D04: veri havuzunda kaynaklar arası tekilleştirme ve kullanıcı referanslarını koruyan dönüşüm.
|
||
- D05: tam ilan, metadata, arama yarışları/sorgu etiketi ve kapsamlı filtre testleri.
|
||
- D06: sürümlü ortak belge/AI modeli, kaynak atıfları, belgeye sor ve diğer AI yollarının birleştirilmesi, doğru süre/kalem/teklif türü aktarımı ve çelişki engelleri. Şu an süre için ilk yerel çıkarım var; kapsam tamamlanmadı.
|
||
- D07: tek sağlık hazırlık ekranı, kalem uygunluğu/belge durumu/servis ve numune takibi, menü düzeni.
|
||
- D08: sabit kurun kaldırılması, gerçek kaynak/zaman bilgisi; fiyat karşılaştırma ve eşleşme iddialarının düzeltilmesi.
|
||
- D09: normal hesaplar, mobil/erişilebilirlik, PDF/OCR, ödeme test ortamı, API, uyarılar, PWA ve tüm diğer modüllerin kabul matrisi.
|
||
- D10: beş resmi doküman ve uygun test firma verisiyle gerçek hazırlık kabulü; tarihleri geçmişse güncel beş adayla ayrıca kabul.
|
||
- D11: küçük sürümlerle yayın, yedek/geri dönüş ve canlı ölçümler.
|
||
|
||
Kod testleri bütün planın tamamlandığını kanıtlamaz. Tarayıcı kanıtı şu an yalnız sentetik görev kalıcılığı senaryosunu kapsar; kapsamlı uçtan uca ve canlı kabul henüz yoktur.
|
||
|
||
## Çıktı doğrulaması sırasındaki değişiklikler
|
||
|
||
Dosya kontrolü sürerken form/kaynak veya oturum değişirse çıktı iptal edilir. Kontrol penceresi tıklama sırasında açılır; doğrulama hatasında kapatılır. Aynı anda ikinci çıktı başlatılmaz. Taslak kaydı sürerken yapılan yeni değişiklikler, önceki kaydın yanıtı geldiğinde kaydedilmiş sayılmaz. Mevcut 35 test ve derleme geçti; bu yarış senaryolarının gecikmeli tarayıcı kabulü ayrıca bekliyor.
|
||
|
||
|
||
## Excel teklif cetveli
|
||
|
||
Hazırlık formuna gerçek XLSX çıktısı eklendi; aynı seçili satırlar ve fiyat ayrıştırıcısı kullanılır. Miktar/fiyatlar sayı hücresidir, satır tutarları yuvarlanan formüller ve önceden hesaplanmış sonuçlarla yazılır. Türkçe başlıklar, firma/İKN/kısım, tekrarlanan baskı başlıkları, filtre ve sabit başlık satırı bulunur. Götürü bedelde birim fiyat cetveli düğmeleri kapalıdır.
|
||
|
||
İki XLSX testi dosyayı üretip yeniden okuyarak 100 satır, Türkçe, 125,50 fiyat ve 25.100 toplamını; ayrıca 0,335 hassasiyet ve 1,01 yuvarlamasını doğrular. Kullanıcı metni formüle çevrilmez. PDF birim fiyat gösterimi de sekiz ondalığa kadar hassasiyeti korur. Tarayıcı indirme ve masaüstü Excel baskı görünümü kabulü bekliyor.
|
||
|
||
ExcelJS ayrı, ihtiyaç anında yüklenen pakettir. Node bağımlılığındaki UUID için uyumlu 11.1.1+ override ve mevcut nanoid yaması uygulandı; npm audit sıfır bulgu döndürdü. Bu sonuç paketlerin önceden derlenmiş tarayıcı içeriğinin bağımsız denetimi değildir. Mevcut büyük paket uyarıları sürer.
|
||
|
||
|
||
## Analiz bütünlüğü
|
||
|
||
AI çıktısına kaynak içerik özeti (SHA-256 sürümü), kaynak/işlenen karakter sayısı, bölüm çıkarım durumu ve kısmi analiz gerekçeleri eklendi. Girdi sınırında kesilen metin, onarılan yarım JSON ve bilinen kaynak sayısından az kalem kısmi sayılır. Hazırlık formu bunu saklar ve çıktıyı engeller. Boş bölüm, şartın bulunmadığı olarak yorumlanmaz. Derin analizdeki 20 kalem kısıtı kaldırıldı; çıktı sınırını aşan analiz yine eksik işaretlenir.
|
||
|
||
İki test kesilme, onarma, eksik kalem, boş bölüm ve kaynak değişimini doğrular. 39 test ve derleme geçti. Bu adım tam uzun doküman işleme değildir: parçalı analiz/birleştirme, OCR, sayfa/madde atıfları ve hukuki çelişki denetimi hâlâ açık. Kısmi analizi tamamlamak için gerekli uzun doküman akışı ayrıca geliştirilmeli; yalnız uyarı eklenmiş olması D06 tamamlanması değildir.
|
||
|
||
|
||
## Uzun doküman analiz akışı
|
||
|
||
24.000 karakter üzerindeki kaynak artık tamamı kapsanacak biçimde parçalara ayrılır; aynı anda en fazla iki bölüm işlenir. Kaynak aralıkları ve başarısız bölümler raporlanır. Kalemler kaynak bölümüyle korunur; birbirinin aynısı görünen farklı satırlar otomatik silinmez. Belgeler/şartlar birleştirilir; farklı miktarlar çelişki olarak işaretlenir. Parça bazlı fiyat önerileri küresel teklif önerisine taşınmaz.
|
||
|
||
Üç kontrollü test metnin sonuna kadar kayıpsız kapsamayı, başarısız bölüm/çelişkiyi ve aynı görünen ayrı satırların korunmasını doğrular. Canlı AI sağlayıcısı ve üretim proxy zaman aşımı bu testlerde kullanılmadı. Uzun işlemleri sürdürülebilir iş kuyruğuna alma, kopma sonrası devam, gerçek kaynak sayfa/madde eşleştirmesi ve parçalar arasında bölünen tablo bağlamının doğrulanması açık. Önceki eksik analiz uyarısı tek başına çözüm değildi; bu akış işlemeyi ilerletir, D06'nın tümünü kapatmaz.
|
||
|
||
|
||
## Kaynak alıntıları
|
||
|
||
Modelden bulguya bağlı birebir kaynak alıntısı istenir. Sunucu, bulgu indeksinin mevcut olduğunu ve alıntının gerçekten işlenen metinde yer aldığını denetler; tekil konum, tekrarlı alıntı ve bulunamayan alıntı ayrılır. Uzun analiz birleştirmesi bulgu indekslerini yeniden eşler. Raporda okunabilir bulgu başlığıyla alıntılar ve doğrulanamayan bulgu sayısı gösterilir. Modelin verdiği sayfa numarası doğrulanmış kabul edilmez.
|
||
|
||
Bir test mevcut olmayan bulgu, yanlış kaynak, doğru alıntı ve tekrarlı konumu kapsar. Bu özellik anlamsal/hukuki çıkarımı doğrulamaz; belge görüntüsüne sayfa/madde bağlantısı ve gerçek sağlayıcı çıktılarıyla kabul ayrıca bekler. 43 test ve derleme geçti.
|
||
|
||
|
||
## İnceleme kaydı ve sayaçlar
|
||
|
||
Detayda açık kullanıcı işlemiyle incelendi/yeniden aç durumu sunucuya kaydedilir. Sadece pencerenin açılması incelemenin tamamlandığı iddiasını oluşturmaz. Sağ panel Kanban durumundan inceleme sonucu çıkarmayı bıraktı; aynı incelendi alanını ve filtre ölçütünü kullanır. İncelenmiş kayıt güncel havuzdan düşerse kayıtlı snapshot korunur. Aynı ihalede süren kayıt nedeniyle reddedilen işlem artık sessiz kalmaz.
|
||
|
||
İki test sayaç/filtre eşitliği ve havuz dışı kaydı kapsar. Tarayıcıda sentetik Giresun kaydı incelendi olarak işaretlenip yenilendi: incelenen1, incelenmemiş4 kaldı. [Kanıt](evidence/qa-reviewed-after-reload.txt). 45 test ve derleme geçti.
|
||
|
||
|
||
## Kullanıcı verisi yedek/geri yükleme aracı
|
||
|
||
SQLite snapshot, referanslı belge kopyası, SHA-256 manifesti, bütünlük kontrolü ve yeni dizine geri yükleme eklendi. Çalışan yazıcıların durdurulması önkoşuldur; araç canlı üretim servisini kendisi durdurmaz. Bir test gerçek dosya ve hazırlık kaydının geri gelmesini, hedef üzerine yazmama ve bozuk yedek reddini doğrular. 46 test geçti. [Operasyon adımları ve kapsam sınırı](yedek-geri-yukleme.md). Üretim yedeği, tüm volume ve dağıtım geri dönüş provası hâlâ açık.
|
||
|
||
### D01 — Not kaydı sırasında yeni düzenlemenin korunması
|
||
|
||
- Önceki `await mutateTender` sonrası koşulsuz metin temizleme kaldırıldı. Başarılı yanıt yalnız gönderilen taslak nesnesi hâlâ güncelse o taslağı temizliyor; aynı metne dönülmüş olsa bile yeni düzenleme korunuyor.
|
||
- Kaydedilmemiş notlar bileşen oturumu içinde ihale bazında ayrılıyor. Hesap değişikliğinde temizleniyor; eski hesaptan/geçmiş oturumdan gelen yanıt başka taslağı temizleyemiyor. Bu geçici taslaklar sayfa yenilemesi için kalıcı kayıt değildir; Not Ekle ile sunucuya kaydedilen notlar mevcut kalıcı kayıt yolunu kullanıyor.
|
||
- Not alanına erişilebilir ad eklendi, kayıt beklerken/boş metinde gönderim düğmesi devre dışı bırakıldı. Kullanılmayan eski kaşe sürükleme durumu kaldırıldı.
|
||
- Doğrulama: 48/48 otomatik test ve üretim derlemesi geçti. İki yeni test gecikmiş yanıt, yeni düzenleme, aynı metne geri dönme, başka ihale ve hesap/oturum ayrımını kapsıyor. Gerçek tarayıcıda geciktirilmiş kayıt senaryosu bu adımda çalıştırılmadı. Mevcut paket boyutu uyarıları sürüyor.
|
||
- Tam plan, resmi beş dosya kabulü ve canlı yayın hâlâ tamamlanmış sayılmıyor.
|
||
|
||
### D02 / D09 — Sunucu tarih hesabı ve takip tüketicileri
|
||
|
||
- RSS/MCP açık ihale filtresi ve yaklaşan ihale API’si arayüzle aynı `deadlineInfo` hesabını kullanıyor. Bugün saati geçmiş kayıt yaklaşan listeden çıkarılıyor; bilinmeyen saat `saat_dogrulanmali` ile ayrılıyor. Geçersiz tarih yaklaşan listeye alınmıyor; genel aramada kaydı gizlemek yerine korunuyor.
|
||
- Yaklaşan liste, haftalık özet, zeyilname takip haritası ve plan takip sayacı güncel tender_state kayıtlarını okuyor. Eski takip listesi uyumluluk için okunuyor ancak güncel açık takipten çıkarma kararı eski kopyaya üstün geliyor. Havuz dışında kalan takipli kayıtlar saklanan anlık görüntüden yaklaşan listeye katılıyor.
|
||
- Haftalık özetin HTML/metin çıktısında saat ve Türkiye saati etiketi veya saat doğrulama uyarısı var. Pazartesi 08.00 zamanlama hesabı sunucu yerel saatinden bağımsız. İlan aciliyet günü de ortak tarih hesabını kullanıyor.
|
||
- Kanıt: 51/51 otomatik test geçti. Yeni testler üç sunucu saat dilimi, İstanbul/UTC gün sınırı, geçersiz tarih, geçmiş saat, eksik saat, takipten çıkarma, havuz dışı kayıt, hesap ayrımı ve haftalık çalışma sınırını doğruluyor. Gerçek e-posta/Telegram/push gönderilmedi; teslim ve yeniden deneme senaryoları hâlâ açık. Resmi takvim içe aktarımı ve tüm zeyilname akışı tamamlanmış sayılmıyor.
|
||
|
||
### D06 — AI iç alan şeması ve bozuk parça yalıtımı
|
||
|
||
- Analiz listelerinin iç elemanları, metin alanları, belge zorunluluğunun gerçek boolean olması, teknik özellik listeleri, parasal sayı alanları, olasılık sınırı, yol haritası adımı ve kaynak alıntısı nesneleri sunucuda doğrulanıyor. Yanlış türler kullanıcı arayüzüne aktarılmadan hata üretiyor.
|
||
- Kalem adı/miktar veya belge adı/zorunluluk bilgisi eksikse kaynak incelemesi `partial` oluyor. Kaynakta bulunmayan miktar veya zorunluluk değeri uydurulmuyor.
|
||
- Parçalı analizde şema doğrulaması birleştirmeden önce yapılıyor. Null kalem/alıntı gibi hatalı bir parça tüm birleştirmeyi çökertmiyor; başarısız kaynak aralığı olarak korunuyor. Hiçbir geçerli parça yoksa analiz başarısız oluyor.
|
||
- Kanıt: 54/54 test geçti. Yeni regresyonlar hatalı nested alanlar, metin olarak false, eksik miktar/zorunluluk, bozuk parça ve tamamen başarısız belgeyi kapsıyor. Mevcut test örneklerinden iki olumlu fixture kaynak miktarı/zorunluluk bilgisi içerecek şekilde tamamlandı.
|
||
- Sınır: Bu şema doğrulaması anlam veya mevzuat doğruluğunu kanıtlamaz. Gerçek sağlayıcı yanıtları, kaynak belgeyle semantik çelişki kontrolü ve uzun işlerin kalıcı devam ettirilmesi hâlâ açık.
|
||
|
||
### D09 — İhale detayında klavye erişimi
|
||
|
||
- Ana listedeki ihale başlığı gerçek düğme oldu; Enter/Space ile detay açılabiliyor, görünür klavye odağı ve dialog işareti var.
|
||
- Detay penceresine dialog rolü, başlığıyla erişilebilir ad, kapatma düğmesine ad, başlangıç odağı, Tab/Shift+Tab döngüsü ve Escape ile kapanış eklendi. Kapanışta hâlâ DOM’da bulunan açan kontrole odak dönüyor. İç içe başka dialogdan gelen olaylar alt pencereyi kapatmıyor.
|
||
- Tarayıcı kanıtı: `evidence/qa-detail-keyboard.txt`. Yerel sentetik Giresun kaydı başlık düğmesinden Enter ile açıldı; ilk/son kontrol arasında ileri-geri döngü ve Escape sonrası başlık düğmesine dönüş doğrulandı. Sağdaki yaklaşan ihale düğmesinden açılış/dönüş de geçti.
|
||
- Üretim derlemesi geçti; mevcut paket boyutu uyarıları sürüyor. Bu kontrol bütün modallerin erişilebilirliğini, ekran okuyucu deneyimini veya gerçek mobil genişlikleri doğrulamaz. Arka planın inert yönetimi ve üst üste farklı modallerin tüm kombinasyonları ayrıca ele alınmalı.
|
||
|
||
### D04 / D06 — Havuz ve analiz kalemlerinin farklı olması
|
||
|
||
- Önceden havuzda en az bir kalem olduğunda analiz kalemleri sessizce kullanılmıyordu. Form artık iki dolu listenin ad/miktar/teknik özellik envanterini karşılaştırıyor; farklılık varsa kaynak seçilene kadar çıktı hazır sayılmıyor.
|
||
- Kullanıcı resmi cetvelle karşılaştırarak ihale havuzu veya doküman analizi listesini seçebiliyor. Seçim taslakla kaydediliyor; liste içeriği ya da analiz belge sürümü değişirse yeniden seçim gerekiyor. Seçim, kaynak ve uygunluk incelemesi yerine geçmiyor.
|
||
- Kaynak anlık görüntüsü kullanılmayan analiz listesini de içeriyor; analiz listesi değişimi önceki kaynak onayını geçersizleştiriyor. Fiyatlar seçilen gerçek satır kimlikleriyle eşleniyor.
|
||
- Bekleyen taslak kaydı sonrasında kapatılmış bileşene hata yazılması da önlendi.
|
||
- Kanıt: 55/55 test ve üretim derlemesi geçti. Testler iki farklı miktar listesi, açık seçim, sürüm/liste değişimi ve aynı satırların farklı sırada bulunmasını kapsıyor. Gerçek resmi cetvellerin semantik eşleştirmesi ve kaynak seçiminin tarayıcıda uçtan uca kabulü hâlâ açık; farklı isimlendirmeler kullanıcı karşılaştırması gerektirebilir.
|
||
|
||
### D01 / D09 — Belge tarihi ve yükleme doğrulaması
|
||
|
||
- Son kullanma tarihini kaldırma artık eski tarihi korumuyor: PATCH alanının gönderilmemesi ile açık null gönderilmesi ayrıldı. Kategori değişikliği tarihi, tarih değişikliği kategoriyi koruyor.
|
||
- Yükleme ve üst veri güncellemesinde gerçek takvim günü doğrulanıyor; 31 Şubat, artık yıl olmayan 29 Şubat, tarih sonuna eklenen metin ve yanlış türler reddediliyor.
|
||
- Dosya aktarımının base64 kodlaması ve 10 MB dosya sınırı doğrulanıyor. Bozuk kodlamanın boş veya kısmen çözülmüş dosya olarak kaydedilmesi önlendi. Bu kontrol PDF/DOCX iç yapısının sağlam olduğunu kanıtlamaz; ayrıştırma/OCR hata senaryoları açık.
|
||
- Kanıt: genişletilen HTTP testleriyle 55/55 test geçti; bozuk yükleme ve tarih isteği 400, diğer hesabın tarih silmesi 404, geçerli silme ve kategori koruma doğrulandı. 10 MB tam sınırı ve bir bayt fazlası ayrıca gerçek Buffer ile geçti. Gerçek dosya indirme ve bayt eşitliği regresyonu geçti. Tarayıcıda ardışık tarih güncelleme yarışı ayrıca incelenmeli.
|
||
|
||
### D01 — Dosya kaydı başarısızlığında temizlik
|
||
|
||
- Yeni yükleme tek servis üzerinden benzersiz ad ve exclusive write ile yazılıyor; metadata INSERT başarısızsa yalnız bu yüklemenin baytları siliniyor. Temizlik de başarısızsa ayrı hata veriliyor. Önceden mevcut dosyalara dokunulmuyor; yeni dosyanın izinleri 0600.
|
||
- Fiziksel silme sırasında yalnız ENOENT (zaten yok) tolere ediliyor. Erişim/tür/disk hataları artık bastırılmıyor; belge metadata kaydı silinmeden hata dönüyor.
|
||
- Kanıt: 57/57 test geçti. SQLite trigger ile gerçek INSERT hatası üretildi; dosya listesi değişmedi ve önceden kayıtlı Türkçe belge baytları korundu. Dizin üzerinde unlink hatasıyla metadata koruması ve diğer hesabın silme reddi doğrulandı. Mevcut HTTP yükleme/indirme testi geçti.
|
||
- Kalan sınır: süreç aniden kapanırken dosya/DB arasında tam atomiklik ve fiziksel silme sonrasındaki DB silme hatasının kurtarılması henüz çözülmüş değildir. Bunlar dosya yaşam döngüsü kapsamında açık tutuluyor; tam belge dayanıklılığı kabulü verilmedi.
|
||
|
||
### D09 — PWA önbelleği ve gerçek durum açıklaması
|
||
|
||
- PWA ekranındaki çalışmayan aç/kapat benzeri düğme kaldırıldı; düğme gerçekten Cache API üzerinden İhaleist önbellek durumunu yeniden okuyor. Destek/hata/bekleme durumları gösteriliyor. Koşulsuz “Senkronize” yerine bağlantı durumu var; bağlantının sunucuya erişim garantisi olmadığı belirtiliyor.
|
||
- Ürün metni mevcut davranışla hizalandı: uygulama kabuğu açılabilir, özel belge/hazırlık kaydı için bağlantı gerekir; çevrimdışı yazma kuyruğu varmış gibi sunulmuyor.
|
||
- Service worker v3 yalnız bilinen kabuk ve varlık yollarını önbellekliyor. API, authorization başlıklı istekler ve rastgele GET yolları ağda kalıyor. Başarısız/yanlış MIME yanıtları sağlam kabuğu veya JS/CSS’yi bozamıyor; HTML yedeği varlık isteğine dönmüyor. Aktivasyon sadece eski İhaleist cache adlarını temizliyor.
|
||
- Kanıt: gerçek sw.js kodunu VM içinde fetch/activate olaylarıyla çalıştıran iki regresyon eklendi; 59/59 test ve üretim derlemesi geçti. API/özel yol, authorization, sunucu 500, offline kabuk, offline asset, yanlış MIME ve başka uygulama cache’ini koruma kontrol edildi.
|
||
- Sınır: VM testleri gerçek service worker kurulumu/güncellemesi veya cihazda offline kullanım kabulü değildir. Bunlar ve hesap değişiminin gerçek tarayıcıdaki tüm PWA senaryoları hâlâ açık.
|
||
|
||
### D02 / D05 — Ana liste tarih filtresi ve sıralaması
|
||
|
||
- Acil/uzak sıralamada gg.aa.yyyy metninin alfabetik karşılaştırılması kaldırıldı; yıl/ay/gün ve aynı gün içinde saat karşılaştırılıyor. Tarihi bilinmeyenler iki yönde de sonda kalıyor.
|
||
- Ana liste, özet kartları ve canlı üst sayacın açık ihale hesabı ortak deadlineInfo ile çalışıyor; 30 saniyelik saat güncellemesi sayfa açıkken süre dolmasını yansıtıyor. İptal/sonuç/sözleşme ve kazananı bilinen kayıtlar açık kabul edilmiyor. Tarih veya saat bilinmiyorsa uydurulmuyor.
|
||
- Filtre etiketi ve açıklaması eksik tarihli kaydın kesin açık olduğu izlenimini azaltacak şekilde güncellendi; sıralama alanına erişilebilir ad eklendi. Bugün/önceki ziyaret gün anahtarı Türkiye saatine bağlandı.
|
||
- Kanıt: 61/61 test ve build geçti. Ay/yıl geçişi, aynı gün saat sırası, bilinmeyen tarih, tam son teklif anı, eksik saatte Türkiye gece yarısı ve kapalı durumlar test edildi. Yeni eklenenler sıralamasının kayıt kimliği kullanımı, tüm kaynakların ilan zamanı doğrulaması ve tarayıcıda saat ilerletme kabulü hâlâ açık.
|
||
|
||
### D03 / D09 — İhale listesinde gerçek Excel çıktısı
|
||
|
||
- Ana listedeki Excel düğmesinin CSV/data-URI çıktısı gerçek XLSX ile değiştirildi. Tıklama anındaki filtrelenmiş listenin tamamı, yalnız görünür ilk 20 kayıtla sınırlanmadan aktarılıyor; ihale saati ve kaynak bağlantısı da çıktı alanlarına eklendi.
|
||
- Türkçe metin, virgül, satır sonu, #, & ve İKN metin olarak korunuyor. Kaynak metni Excel formülüne dönüştürülmüyor. Başlık sabitleme ve otomatik filtre var.
|
||
- Çıktı hazırlanırken düğme bekleme gösteriyor; hata görünür. Ekran kapatılır veya oturum değişirse geç gelen dosya indirmesi iptal ediliyor. Boş liste dışa aktarımı engelleniyor.
|
||
- Kanıt: 125 satırın gerçek XLSX yeniden okunması, ilk/son kayıt, saat, CPV, kaynak ve = ile başlayan metin hücresi testi geçti. 62/62 test ve build geçti. Tarayıcıdan dosya indirme ve masaüstü Excel açılışı bu adımda yapılmadı; tüm çıktı kabulü henüz tamamlanmış sayılmıyor.
|
||
|
||
### D05 — Yayın zamanına göre yeni ilan sıralaması
|
||
|
||
- “En yeni” artık kayıt kimliğine göre değil doğrulanabilir yayın tarihi/zamanına göre sıralanıyor. Alan etiketi “Yayın Tarihi: En Yeni” olarak açıklandı. Tarihi bilinmeyenler sonda; aynı günde saati bilinmeyenler kesin saatli kayıtların ardından geliyor.
|
||
- ISO/ofsetli zamanlar Türkiye gününe dönüştürülüyor; Türkçe kaynaklardaki ofsetsiz saatler İstanbul kabul ediliyor. Geçersiz takvim günü/saat reddediliyor; varsa ayrı ilan tarihi kullanılıyor. Süre metni veya keyfi kayıt kimliği yayın zamanı olarak yorumlanmıyor.
|
||
- Bugün eklenenler hesabında bilinen yayın tarihi, eskimiş isYeni bayrağına üstün geliyor. Uyum puanı eşitliğinde de kimlik yerine yayın sırası kullanılıyor; sayısal id nedeniyle localeCompare hatası ortadan kalktı.
|
||
- Kanıt: yayın zamanı regresyonuyla 63/63 test ve build geçti. UTC/Türkiye gün sınırı, ofsetsiz saat, farklı türde kimlik, geçersiz tarih ve eski isYeni bayrağı doğrulandı. Kaynakların gerçek saat dilimi sözleşmelerinin tek tek teyidi ve gerçek veriyle görsel kabul hâlâ açık.
|
||
|
||
### D05 — Türkçe arama ve sorguya bağlı kalem sonuçları
|
||
|
||
- Başlık/kurum/İKN/kalem araması ortak normalizasyon kullanıyor: Türkçe büyük-küçük harf, birleşik Unicode karakterleri, noktasız ı ve fazla boşluklar aynı şekilde ele alınıyor. Metin ve nesne biçimindeki kalem özetleri destekleniyor.
|
||
- Tam kalem havuzu eşleşmeleri artık üretildikleri sorgu ile saklanıyor. Kullanıcı yeni sorguya geçtiği render anında önceki sorgunun eşleşme haritası kullanılmıyor; debounce/ağ beklerken eski sonuçlar yeni aramaya karışmıyor. Mevcut geç yanıt iptal kontrolü korunuyor.
|
||
- Kanıt: Türkçe alan eşleşmeleri ve hemogram → mikroskop sorgu geçişi regresyonlarıyla 65/65 test ve build geçti. Gerçek arama sağlayıcısının tüm eşanlamlı/tıbbi ürün kapsamı ve tarayıcıda geciktirilmiş ağ kabulü henüz doğrulanmadı.
|
||
|
||
### D01 / D05 — Detay yükleme hatası ve yeniden deneme
|
||
|
||
- İlan detayını yüklerken boş kaynak metni artık sessiz başarı/boş ekran olarak bırakılmıyor. Yükleniyor, hata ve yeniden deneme durumları detay penceresinde gösteriliyor.
|
||
- Detay isteğine 30 saniye zaman aşımı ve iptal sinyali eklendi; pencere kapatıldığında/ihale değiştiğinde istek durduruluyor ve geç yanıt önceki kayda uygulanmıyor.
|
||
- Kaynak detayının kullanıcıya özel görev/not/taslak alanlarını ezmemesi için yanıt publicTender süzgecinden geçiriliyor.
|
||
- Kanıt: boş başarılı yanıt, sonraki başarılı deneme, HTTP 503, zaman aşımı ve iptal regresyonuyla 66/66 test ve build geçti. Gerçek kaynakta hata→yeniden deneme tarayıcı kabulü ve tüm kaynak türlerinin detay akışları ayrıca açık.
|
||
|
||
### D06 — Teklif geçerlilik süresinin kaynaklı aktarımı
|
||
|
||
- Analiz sonucunda procurementTerms.bidValidity alanı sunucuda tüketilen kaynak metinden üretiliyor: gün sayısı, bulunan/bulunamayan/çelişkili durumu, birebir alıntı ve karakter aralığı. Teslimat/garanti günleri teklif geçerliliği olarak seçilmiyor.
|
||
- Form bu yapılandırılmış değeri ve ilan maddelerini birlikte kullanıyor; sonuç taslakla saklanıyor ve kaynak sürümü kontrolüne katılıyor. Bulunan kaynak alıntıları kullanıcıya gösteriliyor. Birden fazla farklı süre varsa ilkini sessizce seçmek yerine çıktı engelleniyor.
|
||
- Süre alanında pozitif tam gün isteniyor. Mevcut kullanıcı düzenlemesi yeni analizle sessizce ezilmiyor; kaynak koşulundan kısa süre hazır kabul edilmiyor.
|
||
- Kanıt: büyük harfli Türkçe madde, parantezli yazıyla sayı, 120 günün analiz/JSON saklama/form kaynağına aktarımı, tekrar aynı süre ve 120/60 çelişkisi testleriyle 68/68 test ve build geçti.
|
||
- Sınır: Açıkça etiketlenmiş sayısal Türkçe maddeler destekleniyor; salt yazıyla ifade, OCR bozulması ve farklı madde biçimleri manuel kaynak kontrolü gerektirebilir. Bu, tüm ihale koşullarının ortak veri modeline taşındığı veya hukuki çelişki denetiminin tamamlandığı anlamına gelmez.
|
||
|
||
### D06 — Kaynaklı teklif türü aktarımı
|
||
|
||
- Açık teklif türü etiketi veya teklif verileceğini belirten desteklenen maddelerden birim/götürü türü ve alıntı konumu çıkarılıyor; procurementTerms içinde analiz/taslak kaydına taşınıyor.
|
||
- Kaynak türü bilinmeyen yeni form otomatik birim fiyat seçmiyor. Kullanıcı resmi dokümanla seçim yapıyor. Kaynakla ters seçim iki yönde de engelleniyor; ilan/analiz farklı türler içeriyorsa çözülmeden çıktı alınamıyor.
|
||
- Sadece “birim fiyat” geçen örnek tablo veya “götürü bedel teklif verilemez” ifadesi pozitif tür tespiti sayılmıyor. Kalem bulunamaması türü değiştirmiyor.
|
||
- Kanıt: açık birim/götürü maddesi, Türkçe büyük harf, negatif hüküm, eksik liste ve iki tür çelişkisi testleriyle 69/69 test ve build geçti. Kaynak metni biçimleri sınırlıdır; karma teklif türüne ayrı çıktı üretimi ve tüm mevzuat/sözleşme türleri bu adımda tamamlanmadı.
|
||
|
||
### Birleşik tarayıcı kontrolü — güncel form ve liste
|
||
|
||
- Canlı olduğu lsof ile doğrulanan yerel QA sunucusu (127.0.0.1:5173, sentetik beş ihale) üzerinde güncel arayüz kontrol edildi.
|
||
- Acil tarih sırası Aksaray 9 Eylül → Giresun 10 Eylül → Tepecik 11 Eylül → Akdeniz 22 Eylül 10.30 → Kayseri 22 Eylül 11.00 olarak geçti. “ GİRESUN ” araması tek Giresun kartına indi.
|
||
- Yeniden açılan kayıtlı Giresun taslağında firma alanları, geçerlilik 120 gün, birim fiyat ham değeri 125,50, toplam 251,00 TL, kısım 1 ve belge kontrol notu korundu. Resmi kaynak onayı/bağlı belge eksik kaldığından gözlenen PDF çıktı düğmeleri devre dışıydı. Hiçbir gerçek uygunluk onayı veya teklif gönderimi yapılmadı.
|
||
- Kanıtlar: `evidence/qa-integrated-search.txt`, `evidence/qa-integrated-form.txt` (yalnız yapay test firma verisi).
|
||
- Excel düğmesi sonrası arayüz hata göstermedi; ancak download olayı 3 saniye ve yeniden denemede 15 saniye içinde gözlenemedi. İndirme GEÇTİ sayılmadı; tarayıcı olay izlemesi mi uygulama indirme yolu mu ayrıştırılmalı. Önceki dosya üretme/yeniden okuma testi bu uçtan uca açığı kapatmaz.
|
||
- Bu kanıt resmi beş ihale dosyası kabulü değildir; sentetik yerel regresyondur. Gerçek mobil viewport, gerçek belge ve resmi gönderim doğrulaması açık.
|
||
|
||
### D03 / D09 — Görünür Excel indirme bağlantısı
|
||
|
||
- Liste dışa aktarımı artık “Excel Hazırla” → dosya adı/kayıt sayısı/hazırlanma saati → doğrudan indirme bağlantısı akışını kullanıyor. Asenkron üretim sonrası görünmez programatik tıklamaya bağımlılık kaldırıldı; hazır dosya tekrar indirilebilir.
|
||
- Oluşan blob bağlantısı yeni dosya hazırlanırken veya ekran kapanırken temizleniyor. Oturum değişince eski hazır dosya bağlantısı gösterilmiyor. Çıktı tıklama anındaki sonuç kümesini temsil ediyor; yeni filtre için yeniden hazırlama gerekiyor.
|
||
- Tarayıcıda beş sentetik ihale için dosya hazır durumu ve `.xlsx` bağlantısı görüldü, doğrudan bağlantı tıklandı. Kanıt: `evidence/qa-excel-ready-link.txt`. Üretim derlemesi geçti; dosya içeriği için önceki XLSX roundtrip regresyonu geçerlidir.
|
||
- İndirme geçmişini kontrol etmek üzere chrome://downloads erişimi tarayıcı URL güvenlik politikası tarafından engellendi; başka yoldan bu geçmişe erişilmedi. Diskte nihai dosya ve masaüstü Excel açılışı doğrulanmış sayılmıyor. Önceki indirme olayı zaman aşımının kesin kök nedeni henüz belirlenmedi.
|
||
|
||
### D01 / D06 — Firma belgesi ve ortak kalem havuzu ayrımı
|
||
|
||
- Belgelerde kalıcı `tur` alanı (firma/ihale) ve idempotent migration eklendi. Eski belgeler firma türünde kalıyor; kategori adından yayın yetkisi türetilmiyor. Liste türü açıkça gösteriyor.
|
||
- Genel belge yüklemesi firma olarak kaydediliyor ve otomatik kalem yayınlamıyor. İhale detayındaki doküman yükleme ve açık toplu ihale yükleme akışları ihale türünü belirtiyor.
|
||
- /api/kalem/cikar artık belge kimliği, sahiplik, ihale türü ve aynı İKN bağı şartlarını kontrol ediyor. Başka hesaba ait dosya, farklı ihale, firma belgesi veya belgesiz metin ortak havuza yazılamıyor. PDF istemcileri yüklenen belge kimliğini iletiyor.
|
||
- Kanıt: gerçek HTTP akışında firma ve ihale dosyası yükleme; kategori adını değiştirerek yükseltme girişimi; farklı hesap/İKN ve belgesiz çağrı reddi; doğru dokümanla boş cetvel ayrıştırma başarı yolu test edildi. Eski şema migration testinde varsayılan firma türü doğrulandı. 70/70 test ve build geçti.
|
||
- Yayın notu: frontend ve backend birlikte yayımlanmalı; eski istemcinin belgesiz kalem POST’u artık reddedilir. Önceden yüklenmiş resmi dokümanlar otomatik ortak yayın yetkisi kazanmaz; kontrollü yeniden sınıflandırma akışı henüz yok. Geçmişte havuza yazılmış kayıtların köken denetimi ve gerçek PDF/OCR bütünlüğü ayrıca açık.
|
||
|
||
### Belge yükleme ve işleme sonuçlarının ayrılması
|
||
|
||
D01 kapsamında `belgeler.isleme` sürümlü migration ile eklendi. Dosyanın kaydedilmesi artık kalem çıkarımının başarılı olduğu anlamına gelmiyor: bekleyen metin, kalemsiz sonuç, desteklenmeyen biçim, eksik İKN, firma belgesi ve işleme hatası ayrı saklanıp iki belge ekranında gösteriliyor. Yetkisi doğrulanmış çıkarım isteğinin hatası kalıcı kaydediliyor; sonraki başarılı yeniden deneme durumu değiştirebiliyor. Toplu yüklemede liste yenileme hatası kaydedilmiş dosyayı başarısız yükleme olarak etiketlemiyor.
|
||
|
||
Doğrulama: 70 otomatik test ve üretim derlemesi geçti. Gerçek HTTP testinde özel firma belgesi, bekleyen ihale metni, yetkisiz istek, bozuk metin → hata → yeniden deneme → kalemsiz sonuç ve ayrı GET üzerinden kalıcı durum kontrol edildi. Mevcut bundle boyutu/import uyarıları sürüyor.
|
||
|
||
Sınırlar: Bu paket tam belge yaşam döngüsü kabulü değildir. Tarayıcıda PDF okuma hatasının sunucuya kalıcı aktarımı, ekrandan mevcut belgeyi yeniden işleme, dosya/DB çökme atomikliği ve gerçek resmi dosyalarla uçtan uca kabul halen tamamlanmadı. Canlıya dağıtım yapılmadı.
|
||
|
||
### Kaydedilmiş ihale dokümanında yeniden kalem çıkarımı
|
||
|
||
İhale detayında okunabilir, erişilebilir ihale dosyalarına yeniden kalem çıkarımı eklendi. Aynı dosya indirilip metni çıkarılıyor veya mevcut sunucu metin çıkarıcısı kullanılıyor; aynı documentId ile yetkili kalem aktarımı yeniden çağrılıyor. Yeni dosya yüklemesi gerekmiyor. İşlem sırasında silme engelleniyor; sonuç veya hata görünür, belge listesi yeniden okunuyor. Liste okuma hatası artık sessizce yutulmuyor; yükleniyor, hata ve yeniden yükle durumları var. Eski liste isteğinin yeni ihale listesini ezmesi istek numarasıyla önleniyor. Belge satırları dar alanda sarılabiliyor.
|
||
|
||
Doğrulama: üretim derlemesi geçti; HTTP testi, başarısız çıkarım ve yeniden deneme sonrasında aynı belge kaydının ve orijinal dosya baytlarının korunduğunu kontrol ediyor. Bu düğmenin tarayıcı kabulü, genel Doküman Deposu'na aynı işlemin taşınması ve tarayıcı metin okuma hatasının sunucuda kalıcılaştırılması henüz tamamlanmadı.
|
||
|
||
### Tarayıcı metin okuma hatasının kalıcı aktarımı
|
||
|
||
İhale detayındaki yükleme ve yeniden kalem çıkarımı, dosya metni okunamadığında sahiplik kontrollü read-error uç noktasına hata bildiriyor. Sunucu serbest hata metni veya başarı durumu kabul etmiyor; sabit, kullanıcıya yönelik okuma hatasını saklıyor. İstemcinin gördüğü önceki işleme durumu atomik UPDATE koşuluyla karşılaştırılıyor; gecikmiş hata bildirimi daha yeni sonucu ezemiyor (409). Bildirim kaydedilemezse arayüz bunu ayrıca belirtiyor.
|
||
|
||
70 test geçti. HTTP kapsamında oturumsuz/başka hesap/firma belgesi reddi, kalıcı hata ve eski durumla tekrar bildirimin 409 olması doğrulandı. Mevcut dosya ve baytları sonraki çıkarım denemelerinde korunuyor. Gerçek PDF ile tarayıcı kabulü ve genel depoya yeniden işleme entegrasyonu açık; bu değişiklik tam D01 kabulü sayılmıyor.
|
||
|
||
### Genel belge deposunda yeniden işleme
|
||
|
||
Doküman Deposu'nda İKN bağlantılı, okunabilir ihale belgelerine yeniden kalem çıkarımı eklendi. İhale detayı ve depo artık aynı storedDocument servisiyle mevcut dosyayı okuyor, okuma hatasını kaydediyor ve sahiplik kontrollü kalem aktarımı yapıyor. Özel firma belgeleri bu işleme dahil değil. İşlem sonucu ve liste yenileme hatası ayrı gösteriliyor. Belge okuma sırasında oturum değişirse eski belge metninin yeni oturumla aktarımı veya hata bildirimi durduruluyor.
|
||
|
||
71 test geçti; üretim derlemesi geçti. Yeni servis testi mevcut dosya ID/İKN/metin aktarımını, okuma hatasının önceki durumla raporlanmasını ve hesap değişikliğinde ikinci isteğin gönderilmemesini doğruluyor. Gerçek tarayıcı PDF kabulü ve tüm depo işlemlerinin hesap değişiminde ekran durumlarını temizlemesi henüz açık.
|
||
|
||
### Depo oturum ayrımı ve dosya aktarımı
|
||
|
||
Doküman Deposu hesap kimliğine göre yeniden oluşturuluyor; eski bileşenden veya değişmiş token'dan gelen sonuçlar durum güncellemesine uygulanmıyor. Toplu yüklemenin sonraki dosyası ve kalem aktarımı öncesinde oturum kontrolü var. Ortak yükleme servisi FileReader tamamlandığında token değişmişse istek göndermiyor; ortak indirme servisi blob tamamlandığında token değişmişse tarayıcı indirmesi başlatmıyor. Bu kontroller sunucunun sahiplik kontrollerine ek olarak istemcide eski oturum işinin devamını sınırlıyor.
|
||
|
||
72 test ve üretim derlemesi geçti. Yeni test, FileReader sırasında hesap değiştiğinde sıfır yükleme isteği gönderildiğini ve blob okuma sırasında hesap değiştiğinde indirmenin reddedildiğini doğruluyor. Gerçek tarayıcıda çok dosyalı yükleme/hesap değişimi kabulü, aynı hesapta eşzamanlı metadata yanıt sıralaması ve diğer modüllerin oturum denetimi halen açık.
|
||
|
||
### Gerçek tarayıcıda PDF yükleme/yeniden işleme kabulü
|
||
|
||
Güncel backend için ayrı localhost:5174 QA örneği açıldı (önceki 5173 örneğine dokunulmadı). In-app tarayıcıda sentetik Giresun kaydına iki dosya yüklendi: okunabilir, cetvel içermeyen PDF ve kasıtlı bozuk PDF. Okunabilir PDF kalemsiz sonuç verdi; aynı dosyada yeniden çıkarım 0 kalem sonucunu gösterdi. Bozuk PDF kaydı korundu, okuma hatası kalıcı göründü. Genel depoya geçiş ve sayfa yenilemesi sonrasında iki dosya ve ayrı durumları korundu; depodaki yeniden çıkarım bozuk dosya hatasını gösterdi, belge sayısı 2 kaldı.
|
||
|
||
Tarayıcı testinde bulunan İngilizce PDF istisnası kullanıcıya yönelik Türkçe mesaja dönüştürüldü; depodaki eski 8 MB metni sunucunun 10 MB sınırıyla eşitlendi. Türkçe hata tarayıcıda tekrar doğrulandı. 72 test ve üretim derlemesi geçti.
|
||
|
||
Kanıt: evidence/qa-document-upload.txt (ilk hata metni dahil), evidence/qa-document-vault-retry.txt (düzeltme sonrası). Test dosyaları tests/fixtures/document-readable.pdf ve document-broken.pdf; resmi ihale belgesi değildir. Bu kabul OCR, 40 sayfayı aşan doküman, gerçek cetvel kalem doğruluğu veya beş resmi dosyanın tamamlanması anlamına gelmez. Bunlar halen açık.
|
||
|
||
### PDF sayfa bütünlüğü ve karma belge okuma
|
||
|
||
Varsayılan 40 metin sayfası ve 8 OCR sayfası sınırı kaldırıldı; tüm sayfalar sırayla okunuyor. Karma PDF'de metni az olan sayfalar ayrı OCR'a gönderiliyor, metinli sayfalar korunuyor. OCR hatası artık başarılı metin okuma sonucuna çevrilmiyor; hata sayfa numarasıyla kullanıcıya dönüyor. Sonuç sayfa bazında metin/OCR yöntemini ve bütünlük durumunu taşıyor. Açık maxPages kullanan düşük seviye çağrı kısmi sonucu complete:false olarak işaretliyor; uygulamanın mevcut çağrılarında böyle bir sınır yok. Sayfa, canvas, OCR worker ve pdfjs yükleme görevi kaynakları serbest bırakılıyor.
|
||
|
||
76 test ve üretim derlemesi geçti. Testler 45 sayfalık gerçek PDF baytlarını pdfjs ile okuyarak son sayfa maddesinin korunduğunu; karma sayfa sırasını ve OCR hatasının başarısızlık olarak iletildiğini doğruluyor. Gerçek PDF testi kütüphanede DocumentProxy.destroy bulunmadığını ortaya çıkardı; kapatma LoadingTask.destroy üzerinden düzeltildi.
|
||
|
||
Sınırlar: gerçek tarayıcıda uzun/taranmış karma PDF performansı ve OCR doğruluğu kabulü açık. Sayfa okunmuş olması OCR metninin anlamsal doğruluğunu kanıtlamaz. OCR varsayılanı metni 100 karakterden kısa sayfalarda çalışır; küçük metinli sayfalarda ek işlem maliyeti oluşabilir. Resmi dosya ve beş ihale kabulü tamamlanmadı.
|
||
|
||
### Karma PDF tarayıcı OCR kabulü ve kaynak önizlemesi
|
||
|
||
Test dosyası document-mixed.pdf bir yerel metin sayfası ve Türkçe metin içeren görüntü sayfasından oluşuyor. Gerçek in-app tarayıcıda yükleme tamamlandı, kayıt korundu ve cetvel bulunmadığı gösterildi. Yeni “Metni incele” işlemi kaydedilmiş dosyayı okuyor; toplam/okunan sayfa sayısı, OCR uygulanan sayfalar ve tam çıkarılan metni AI çağrısı yapmadan gösteriyor. Önizleme ihale değişiminde temizleniyor; geç gelen başka ihale/oturum yanıtı uygulanmıyor.
|
||
|
||
Tarayıcı kanıtı: evidence/qa-mixed-pdf-ocr.txt. 2/2 sayfa okundu, yalnız sayfa 2 OCR olarak işaretlendi. İKN doğru okundu; “için” ve “içerir” sözcüklerinde OCR hataları gözlendi. Dolayısıyla bu test OCR çalışmasını ve sayfa kapsamını doğrular, kusursuz metin veya resmi kalem doğruluğunu doğrulamaz. Önizlemede resmi dokümanla karşılaştırma uyarısı var. OCR doğruluğunu iyileştirme, insan kontrolünün sonraki hazırlık adımlarına zorunlu aktarımı ve uzun tarama performansı açık.
|
||
|
||
76 test ve üretim derlemesi geçti. Test dosyası sentetiktir; beş resmi ihale kabulü yerine geçmez.
|
||
|
||
### OCR ve kaynak kapsamının analiz sonucuna aktarımı
|
||
|
||
Doğrudan dosya analizi, kayıtlı belge analizi ve toplu derin analiz; OCR, toplam/okunan sayfa ve eksik kaynak bilgisini API'ye taşıyor. Sunucudaki analiz nitelendirmesi bu bilgiyi modelin tamamlanma iddiasından bağımsız değerlendiriyor. OCR veya okunmayan kaynak varsa sourceReview.partial ve açık uyarı üretiliyor; uzun metin parçaları birleştirilirken bu bilgi korunuyor. Hazırlık formundaki mevcut partial engeli bu sonuçlara da uygulanıyor ve nedenler formda gösteriliyor. İstemcinin verified gibi alanları kabul edilmiyor.
|
||
|
||
78 test geçti; üretim derlemesi geçti (sonraki form uyarı metni değişikliği ayrıca diff kontrolünden geçti). Testler modelin complete iddiasının OCR/eksik sayfa uyarısını silemediğini ve atlanan dosyanın birleşik kaynak incelemesinde korunduğunu doğruluyor.
|
||
|
||
Sınırlar: OCR metnini resmi kaynakla karşılaştırıp düzelterek sürümlü insan onayı verme akışı henüz yok; kontrolsüz bir onay kutusuyla engel kaldırılmadı. Eski kayıtların veya metadata göndermeyen eski istemcilerin OCR geçmişi geriye dönük çıkarılamaz. Gerçek AI sağlayıcısıyla uçtan uca kabul ve beş resmi dosya kabulü açık.
|
||
|
||
### Sürümlü düzeltilmiş belge metni — sunucu altyapısı
|
||
|
||
Belge sahibinin OCR/metin incelemesini kaydetmesi için document_text_reviews tablosu ve migration eklendi. Kayıtlar kaynak dosyanın SHA256 özeti, düzeltilmiş metnin özeti, düzeltme metni, karşılaştırma notu, hesap kimliği, sunucu zamanı ve artan sürüm içeriyor. GET/POST text-review uç noktaları yalnız sahibinin ihale dokümanında çalışıyor. Beklenen dosya özeti ve önceki sürüm uyuşmazsa 409; tüm sayfaların karşılaştırıldığı beyanı, yeterli metin ve açıklama olmadan kayıt reddediliyor. Belge silinince özel inceleme geçmişi aynı DB işleminde siliniyor.
|
||
|
||
Doğrulama: mevcut 78 test ve üretim derlemesi geçti; ek kaynak-dosyası-değişimi testi de geçti (toplam 79 ayrı test). HTTP testinde sahiplik, zorunlu karşılaştırma, kalıcı okuma ve eski sürüm reddi; ek testte gerçek dosya baytları değişince incelemenin stale olması ve belge silinince geçmişin kaldırılması doğrulandı.
|
||
|
||
Bu yalnız sunucu altyapısıdır. Metin düzenleme arayüzü, bu kaydın analizde sunucu tarafından çözülmesi ve kontrollü hazırlık ilerlemesi henüz bağlanmadı; mevcut OCR engeli sürüyor. Kullanıcı beyanı hukuki veya otomatik doğruluk garantisi değildir. Gerçek resmi dosya kabulü açık.
|
||
|
||
### Metin inceleme formu
|
||
|
||
İhale dokümanı “Metni incele” paneline DocumentTextReview eklendi. Kaynakla karşılaştırılmış düzeltme metni, sayfa/düzeltme açıklaması ve tüm sayfaları karşılaştırma beyanı alınır. Metin veya not değişince beyan sıfırlanır. Başarısız kayıt taslağı korur; sürüm uyuşmazlığında kullanıcıya taslağını kopyalayıp güncel kaydı yükleme seçeneği sunulur. Son kayıt sürümü/zamanı ve kaynak değişikliği açık gösterilir. Kayıt başarısı sunucu yanıtıyla gösterilir; bileşen kapanması/oturum değişiminden sonraki yanıtlar uygulanmaz.
|
||
|
||
79 test ve üretim derlemesi geçti. Formun gerçek tarayıcı kabulü ve kaydedilen incelemenin analizde sunucu tarafından çözülmesi henüz tamamlanmadı. Form, kayıt işleminin tek başına hazır teklif üretmediğini açıkça belirtiyor; mevcut OCR engeli devam ediyor.
|
||
|
||
### Kaydedilmiş inceleme üzerinden analiz
|
||
|
||
İnceleme formunda kaydedilmiş metin/not değişmemişse “Kaydedilmiş incelemeyi analiz et” sunuluyor. İstemci belge ID ve inceleme sürümünü gönderir; sunucu kaynak dosya özeti, sahiplik, İKN ve son inceleme sürümünü kontrol ederek metni DB'den alır. İstemcinin gönderdiği alternatif metin veya OCR onay bayrağı bu yolda kullanılmaz. AI işi bittikten sonra sürüm tekrar doğrulanır; arada değişiklik varsa sonuç reddedilir. Sonuçta sunucu kaynaklı inceleyen hesap, zaman, sürüm, dosya/metin özeti ve not tutulur. Bu yol OCR uyarısını kullanıcı incelemesiyle açıklayabilir; diğer analiz kusurları ve hazırlık kontrolleri aynen uygulanır.
|
||
|
||
Hazırlık formu inceleme kaynağını gösterir. İnceleme sürümü kaynak snapshot'ına katıldı; aynı kalemlerle yeni inceleme sonucu geldiğinde eski kaynak kontrolü geçersizleşir.
|
||
|
||
79 mevcut test ve ek snapshot testi geçti (80 ayrı test); üretim derlemesi geçti. Kaynak çözümleme testleri başka hesap/İKN, eski revizyon ve değişmiş dosyayı reddediyor. Gerçek AI sağlayıcısıyla tarayıcı kabulü ve çıktı anında sunucudan incelemenin hâlâ güncel olduğunun doğrulanması henüz açık. İnceleme kullanıcı beyanıdır, resmi doğruluk garantisi değildir.
|
||
|
||
### İnceleme güncelliğinin çıktı öncesi doğrulanması
|
||
|
||
PDF/yazdırma akışı, canlı belge listesi kontrolüne ek olarak analizdeki humanReview kaydını sunucuda doğruluyor. İKN, sahiplik, son revizyon, gerçek dosya SHA256 ve düzeltilmiş metin SHA256 eşleşmeden çıktı ilerlemiyor. Excel oluşturma asenkron olduğu için dosya hazırlanırken oluşabilecek inceleme değişikliği indirmeden önce tekrar kontrol ediliyor. API yanıtı düzeltme metninin tamamını taşımıyor; ağ/sürüm hatasında çıktı penceresi kapanıyor ve hata gösteriliyor.
|
||
|
||
80 test ve üretim derlemesi geçti. HTTP doğrulama testinde güncel kayıt kabul edildi; başka hesap, yanlış İKN, yanlış metin özeti ve sonradan oluşturulan yeni revizyon karşısındaki eski kayıt reddedildi. Gerçek tarayıcıda çıktı sırasında inceleme değiştirme kabulü hâlâ açık. Bu kontrol çıktı anına aittir; çıktı alındıktan sonra resmi belge değişirse önceden indirilen dosya otomatik geri alınamaz.
|
||
|
||
### Metin incelemesinin gerçek tarayıcı kabulü
|
||
|
||
Güncel backend ile localhost:5175 üzerinde izole test açıldı. Tek sayfalık sentetik document-readable.pdf yüklendi ve metin önizlemesi açıldı. Karşılaştırma beyanı yokken kaydetme düğmesi kapalı kaldı; açıklama ve beyanla sunucu sürüm 1'i kaydetti. Sayfa yenilemesinden sonra kaynak metin, not ve sürüm 1 korundu.
|
||
|
||
İki ayrı tarayıcı sekmesi aynı sürüm 1'i açtı. İlk sekmede not güncellenip sürüm 2 kaydedildi. İkinci sekmede eski sürümle kayıt girişimi reddedildi, kullanıcı notu formda korundu ve açık sürüm hatası gösterildi. Güncel kaydı yükleme sonrasında sürüm 2 ve ilk sekmenin notu geri geldi; eski sekme kaydı ezmedi.
|
||
|
||
Kanıt: evidence/qa-review-conflict.txt ve evidence/qa-review-reload.txt. Bu tur uygulama kodu değişmedi; daha önceki otomatik testlere ek gerçek UI kanıtı toplandı. Gerçek AI sağlayıcısı ile analiz sonucu ve çıktı sırasında inceleme değiştirme kabulü hâlâ açık. Sentetik tek sayfa karşılaştırması resmi ihale incelemesi değildir.
|
||
|
||
### Gerçek mobil/tablet genişlik kontrolü
|
||
|
||
In-app tarayıcı viewport özelliğiyle 390×844, 768×1024 ve 1440×1000 denendi. İlk mobil görünümde 384 px kullanılabilir genişliğe karşı 513 px belge genişliği vardı; hesap düğmesi ve liste araçları kesiliyordu. Ana içerik ve listeye min-width:0/w-full, araçlara satır kaydırma, üst aramaya mobil/tablette ayrı satır eklendi. Özet kartları dar alanda sarılıyor. Hesap ve bildirim ikonlarına erişilebilir ad eklendi.
|
||
|
||
Son ölçüm: mobil 384/384, tablet 762/762, masaüstü 1434/1434 (içerik/kullanılabilir genişlik; scrollbar 6 px). Mobil belge inceleme bölgesi 244/244, iki metin alanı ve kaydet/analiz düğmeleri viewport içinde. Normal viewport geri yüklendi. Kanıt: evidence/qa-responsive-widths.json.
|
||
|
||
80 test ve üretim derlemesi geçti. Bu test ana liste, üst çubuk ve belge inceleme formundaki taşmayı kapsar; tüm modüller, gerçek dokunmatik cihaz, ekran okuyucu ve bütün klavye akışları kabul edilmiş sayılmaz.
|
||
|
||
### Mobil filtre dialog ve odak davranışı
|
||
|
||
Mobil filtre çekmecesi native dialog/showModal kullanıyor: adlandırılmış dialog, açılışta kapat düğmesine odak, Escape/kapat sonrası tetikleyiciye dönüş, arka sayfa kaydırma kilidi ve masaüstüne geçince otomatik kapanma eklendi. OKAS ürün arama penceresi açılırken drawer kapanıyor; native dialog üst katmanının diğer pencereyi örtmesi önleniyor.
|
||
|
||
Gerçek 390 px tarayıcı testinde dialog 337/337 px genişlikle taşmadı, ilk odak “Filtreleri kapat” oldu. Escape sonrası açık dialog sayısı 0 ve odak “Filtreler & Hızlı Erişim” düğmesiydi. Açık çekmecede 1440 px'e geçiş 1 açık dialogdan 0'a geçti. Kanıt: evidence/qa-mobile-filter-keyboard.json. 80 test ve üretim derlemesi geçti. OKAS pencere geçişinin gerçek sonuçla tarayıcı kabulü, tüm filtre kombinasyonları ve ekran okuyucu testi açık.
|
||
|
||
### Ürün arama dialog erişilebilirliği
|
||
|
||
Ürün arama native dialog, başlık bağlantısı, açılış odağı, açık Tab sınırları ve Escape/kapat sonrası odak dönüşü kullanıyor. Mobil iç boşluklar azaltıldı; 390 px dialog içerik genişliği taşmadı. Metin/OKAS seçimleri aria-pressed taşıyor. Tarayıcı testinde ilk uygulamada Shift+Tab BODY'ye çıktı; açık odak döngüsü eklendi. AutoFocus nedeniyle kapanış kontrolünün yanlışlıkla opener kaydedilmesi de düzeltildi; gerekli durumda header ürün arama düğmesi hedefleniyor.
|
||
|
||
Son gerçek tarayıcı sonucu: ters Tab aktif INPUT ile dialog içinde; Escape sonrası 0 açık dialog ve data-product-search-trigger=true olan BUTTON odakta. Kanıt evidence/qa-product-dialog-keyboard.json. 80 test ve son üretim derlemesi geçti. Gerçek arama sonucu/ihale detay geçişi, OKAS çekmecesinden açılış ve diğer modallerin erişilebilirliği halen açık.
|
||
|
||
### Ana havuz dışı ürün arama sonucunun detayı
|
||
|
||
Ürün arama sonuçlarında geçerli EKAP İKN varsa artık ana havuzda bulunmasa da detay açılır. Sonuç kararlı ekap-İKN kimliğiyle mevcut listeye eklenir; varsa sunucudan yüklenmiş kullanıcı durumu uygulanır. Böylece mevcut takip/hazırlık işlemleri aynı kayıt modeliyle çalışabilir. Detay metni İKN üzerinden ilan API'sinden alınır; yanıt başka İKN taşıyorsa reddedilir. İlan metni bulunmayıp yalnız temel bilgi dönmüşse belirgin kaynak uyarısı gösterilir. Hizmet/mal türü kaynaktan korunur; kalemler ve bilinmeyen tarih/saat uydurulmaz.
|
||
|
||
82 test ve üretim derlemesi geçti. Ek testler arama kaydının kararlı kimlik ve kaynak türüyle dönüşmesini, bilinmeyen alanları boş tutmasını, İKN endpoint seçimini, eksik resmi ilan uyarısını ve farklı İKN yanıtının reddini doğruluyor. Gerçek ürün arama yanıtından detay açma/takip kaydetme tarayıcı kabulü hâlâ açık. Ürün aramasının döndürdüğü her alanın resmi dokümanla teyidi ayrıca gereklidir.
|
||
|
||
### D05 — Gerçek ürün araması, takip kalıcılığı ve EKAP tablo alanları
|
||
|
||
Yerel 5175 test hesabında gerçek `hemogram` araması 2.531 sonuç bildirdi. Ana havuzdaki beş sentetik kayıt arasında bulunmayan 2026/1431768 (İnönü Üniversitesi, Biyokimya Laboratuvarı 19 Kalem Tıbbi Sarf Malzeme Alımı) ürün aramasından açıldı. Kaynak ilan metni ve 08.09.2026 11:00 tarihi göründü. Hazırlık Görevi Aç işleminden sonra “Takipte” ve “✓ Görev açık · 08.09.2026 11:00” gösterildi. Sayfa yeniden yüklenip aynı ihale açıldığında iki durum da korundu; kaynak metni yeniden yükleniyordu. Gerçek teklif gönderilmedi. Bu test firma yeterliğini veya resmi doküman dosyasının tamamlandığını kanıtlamaz.
|
||
|
||
Bu akışta kaynakta 3.3 teslim yeri ve 3.4 teslim süresi bulunurken özet alanların boş kaldığı gözlendi. `/api/documents/ilan` yanıtına mevcut kaynak alanı ayrıştırıcısı bağlandı. EKAP HTML tablolarının metne dönüşümündeki `| : |` ayraçları yalnız ayrıştırma kopyasında normalleştirildi; özgün ilan metni korunuyor. Gerçek yanıtta görülen tablo biçimiyle tarih/saat, teslim yeri ve tam teslim süresi için regresyon testi eklendi.
|
||
|
||
Doğrulama: `npm test` ve `npm run build` başarılı. Mevcut büyük paket/statik-dinamik import uyarıları sürüyor. Çalışan eski test sunucusu yeni backend değişikliğini yüklemediğinden yeni özet alanlar için tarayıcı kabulü henüz tamamlanmadı. Son kanıt dosyası oluşturma denemesinde seçici zaman aşımı oluştu; dosya oluşturulduğu iddia edilmiyor. Yukarıdaki takip kalıcılığı bulgusu daha önce başarıyla dönen tarayıcı okumalarına dayanır. D01–D11 planının tümü tamamlanmış değildir.
|
||
|
||
### D06 / D09 — Teklif Asistanı işlem ve hesap ayrımı
|
||
|
||
Kod incelemesinde Taslak Üret akışının belge listesini bekledikten sonra güncel token ile POST attığı doğrulandı. Hesap değişirse eski hesaptan gelen belge adları yeni hesap oturumunda gönderilebiliyordu. Belge listeleme hatası da boş diziye çevrilerek sessizce devam ediyordu.
|
||
|
||
`requestOfferAssistant` tüm adımları başlangıç tokenına ve etkin görünüme bağlar. Belge listesi beklenirken hesap/ihale değişirse AI isteği gönderilmez; geç yanıtın oturumu değişmişse yanıt reddedilir. Gönderimde başlangıç tokenı kullanılır. Belge listesi yüklenememesi veya geçersiz liste kullanıcıya hata olarak döner. Envanter yalnız firma belgeleri ve mevcut İKN belgeleriyle sınırlandırılır.
|
||
|
||
Teklif Asistanı durumu hesap, token oturumu veya İKN değiştiğinde yeniden oluşturulur. Bileşen kapanınca dosya okuma/AI sonucu işlenmez. Eşzamanlı düğme ve dosya işlemleri kilitlenir. Yeni kaynak dosyası yüklenince önceki yanıt/denetim temizlenir; kullanıcının düzenlediği taslak bölümleri korunur.
|
||
|
||
Doğrulama: dört yeni test; belge listesi sırasında hesap değişiminde sıfır AI isteği, envanter hatasında sıfır AI isteği, doğru belge kapsamı ve başlangıç yetkilendirmesi, geç yanıtta hesap/görünüm değişimi. Tüm 87 test geçti. Üretim derlemesi başarılı; büyük paket uyarıları mevcut. Gerçek AI sağlayıcısı ve iki hesaplı tarayıcı kabulü bu turda yapılmadı. D01–D11 kapsamının tamamı halen açık.
|
||
|
||
### D06 — Teklif denetiminde kaynak kanıtı ve belirsizlik puanı
|
||
|
||
Mevcut teklif denetimi model maddelerini dizi sırasıyla gerekliliklere atıyor, modelin `karsilaniyor` kararını taslak alıntısını doğrulamadan kabul ediyor ve belirsiz maddelere yarım puan veriyordu. Bunlar yüksek uygunluk oranının yanlış algılanmasına yol açabiliyordu.
|
||
|
||
Yeni sunucu doğrulayıcısı gerekliliği tam metin eşleşmesiyle tekil olarak bulur; sırası değişmiş yanıtlar doğru maddeye bağlanır. Eksik, değiştirilmiş veya yinelenmiş kimlikler belirsizdir. Karşılanıyor kararında alıntı taslakta (Unicode/boşluk normalleştirmesi dışında değiştirilmeden) bulunmalıdır; yoksa karar belirsiz olur ve uydurma alıntı gösterilmez. Belirsiz satırlar yüzdeye puan eklemez. Özet modelin serbest iddiasından değil doğrulanmış satır sayılarından üretilir. Boş/bozuk üst yanıt hata verir.
|
||
|
||
Ekran oranı yalnız listedeki alıntıyla desteklenen maddeler olarak açıklar; kontrol gereken madde sayısını ve resmi uygunluk/tüm doküman kabulü olmadığını gösterir. Alıntının taslakta bulunması, anlam bakımından şartın karşılandığını tek başına kanıtlamaz. Gereklilik toplamadaki mevcut örnekleme/satır sınırları ve tam doküman kapsamı hâlâ geliştirme gerektiriyor; bu değişiklik tam mevzuat/semantik doğrulama değildir.
|
||
|
||
Doğrulama: uydurma kanıt, eksik madde, yeniden sıralanmış satır, yinelenmiş/değişmiş gereklilik ve bozuk yanıt için dört yeni test. Tüm 91 test ve üretim derlemesi geçti. Gerçek sağlayıcıyla uçtan uca denetim kabulü yapılmadı. Büyük paket uyarıları ve planın diğer açık işleri sürüyor.
|
||
|
||
### D06 — Belgeye Sor kaynak kaybı ve atıf doğrulaması
|
||
|
||
Önceki `parcala` uygulamasında uzun tek satır tek parça olarak kalıyordu. Soru bağlamı her parçanın ilk 1.400 karakteriyle sınırlandığından sonda eşleşen şart modele ulaşmayabiliyordu. Son 40 karakterden kısa parça da atılabiliyordu. Yeni sınırlı parçalayıcı tüm karakterleri, kısa son maddeleri ve Unicode karakter bütünlüğünü korur. Modele seçilen parçalar tam gönderilir.
|
||
|
||
Model yanıtında boş/geçersiz metin, hiç atıf olmaması veya modele sunulmayan kaynak numarası varsa istek hata verir. Atıf yokken rastgele ilk üç parçayı kaynak olarak iliştirme kaldırıldı. Gösterilen kaynaklar yalnız gerçekten atıf verilen parçaların tam metnidir. Yanıtta kaynak SHA-256, toplam ve seçilen parça sayısı taşınır. Ekran seçilmiş parçaların kapsamını açıklar; eşleşme yokluğu şartın belgede yokluğu olarak sunulmaz. “Model uydurmaz” garantisi kaldırıldı.
|
||
|
||
Sınır: Atıf numarasının geçerliliği semantik doğruluk kanıtı değildir. Terim tabanlı ilk sekiz parçanın seçimi başka bölümdeki ek/çelişen koşulu kaçırabilir. Tam doküman/ortak kaynak modeli ve gerçek sağlayıcı kabulü halen açık.
|
||
|
||
Doğrulama: uzun tek satır ve kısa son madde, Unicode sınırları, geçersiz boyut, sahte/eksik kaynak numarası ve yalnız gerçek atıfların tam içeriğini döndürme için dört test. Tüm 95 test ve üretim derlemesi başarılı. Mevcut büyük paket uyarıları sürüyor. Canlıya yayın yapılmadı.
|
||
|
||
### D06 — Üretilen taslağın bölüm bütünlüğü
|
||
|
||
Taslak üretimi önceki kodda istenen bölüm sayısını kontrol etmiyor, tek geçerli bölüm varsa başarılı yanıt dönüyor ve her bölümün içeriğini 12.000 karakterde sessizce kesiyordu. Yeni `qualifyOfferDraft` istenen başlıkları tekil metin eşleşmesiyle sıralar. Eksik/boş başlıklar için açık DOLDURUN alanları ve `partial` durumu döndürür. Eşleşmeyen ek içerik kaybolmaz fakat istenen bölümün yerine sayılmaz. Yinelenen başlık ve nesne gibi geçersiz alan türleri hata verir. Uzun bölümün son koşulları korunur.
|
||
|
||
Ekran, modele göre tamamlanmayan bölümleri ve eşleşmeyen ek bölümleri listeler. Tam bölüm kümesi bile yalnız `draft` durumudur; resmi hazır/onaylı durumu üretilmez. Kullanıcı düzenlediğinde ilk üretim kapsamı uyarısı otomatik doğrulanmış sayılmaz.
|
||
|
||
Doğrulama: eksik bölüm, doğru sıra, 12.000 karakterden uzun içerik ve son koşul, fazladan başlık, yinelenen/bozuk bölüm için dört yeni test. Tam test ve build sonuçları aşağıdaki commit öncesi kontrolle doğrulandı. Gerçek sağlayıcı bölüm üretimi ve tarayıcı kabulü halen açık; ortak gereklilik kaynağının kapsam sınırları bu değişiklikle kapanmış sayılmaz.
|
||
|
||
Sonuç: 99 test geçti; üretim derlemesi başarılı. Büyük paket uyarıları sürüyor. Canlı yayın yapılmadı.
|
||
|
||
### D06 / D09 — İstemci AI yanıt sözleşmesi ve bekleme sınırı
|
||
|
||
İstemci JSON ayrıştırma hatasını `{}` yaparak başarılı HTTP yanıtını kabul ediyordu. Boş/HTML/null yanıtları ve bozuk iç alanlar artık hata verir. Belgeye Sor kaynakları, denetim durumları/sayısal oranları ve taslak bölümleri/inceleme bilgileri ekrana aktarılmadan doğrulanır. Bu kontrol render sırasında `.map`, `.split`, durum renk tablosu veya nesne metni nedeniyle ekranın çökmesini önler. Başarısız yanıt önceki kullanıcı çalışmasının yerine atanmaz.
|
||
|
||
AI HTTP isteği ve yanıt okumasına 120 saniyelik istemci zaman aşımı eklendi; süre dolunca hata gösterilir ve çalışma düğmeleri yeniden kullanılabilir. Bu, sunucudaki sağlayıcı işini iptal ettiğini veya kalıcı iş kuyruğu sağladığını göstermez. Belge envanteri ve OCR işlemleri bu HTTP süresinin dışında; bunların ayrı süre/iptal denetimleri halen kapsam içindedir.
|
||
|
||
Doğrulama: HTML/null/boş yanıt, geçersiz iç durum, askıda istek ve üç gerçek sunucu doğrulayıcısının ürettiği yanıtın istemci sözleşmesiyle uyumu test edildi. Tarayıcıdaki gerçek sağlayıcı arızası kabulü ayrıca açık.
|
||
|
||
Sonuç: Tüm 103 test ve üretim derlemesi geçti. Büyük paket uyarıları devam ediyor. Canlı yayın yapılmadı; tüm plan tamamlanmış değildir.
|
||
|
||
### D09 — Sağlayıcı yokken gerçek tarayıcı hata kabulü
|
||
|
||
Mevcut localhost:5175 QA sunucusunun canlı olduğu doğrulandı; yeniden başlatılmadı. Güncel ön yüz üzerinden QA Giresun → Teklif Asistanı → Taslağı Denetle akışında 200 karakterden uzun sentetik taslak girildi. Anahtarsız izole sunucunun gerçek başarısız yanıtı sonrasında taslağın korunduğu ve Denetle düğmesinin yeniden etkin olduğu DOM'dan doğrulandı.
|
||
|
||
İlk mesaj normal kullanıcıya sunucu anahtarı eklemesini söylüyordu. Kullanıcıya yönelik hizmet kullanılamıyor/yeniden dene açıklaması eklendi; hata `role=alert` olarak duyurulur. Sunucu genel analiz ve teklif araçlarının yapılandırılmamış sağlayıcı mesajları da sadeleştirildi. Güncel istemci eski sunucu 503 mesajlarını da uygun açıklamaya dönüştürür.
|
||
|
||
Değişiklikten sonra aynı tarayıcı akışı tekrarlandı: yeni alert, aynı taslak ve kullanılabilir Denetle düğmesi doğrulandı. Kanıtlar: `qa-offer-provider-error.json`, `qa-offer-provider-error-after.json`. Bu kayıtlar sağlayıcı yokluğu hata yolunu kanıtlar; gerçek AI üretimi, iki hesaplı tarayıcı geçişi, uzun analiz veya başarılı çıktı kabulü değildir. Yeni backend metni çalışan eski sunucuda ayrıca sınanmadı; tarayıcı yeni istemci dönüşümünü doğruladı.
|
||
|
||
Tüm 104 test ve üretim derlemesi geçti. Büyük paket uyarıları sürüyor. Planın kalan kapsamı açık; canlı yayın yapılmadı.
|
||
|
||
### D05 / D09 — Kalem kaynakları ve boş/hata durumu ayrımı
|
||
|
||
Tarayıcıda ihale kaydının bir kalemi görüntülenirken ortak havuz panelinde “kalem listesi henüz yok” mesajı görülmüştü. Panel artık ihale kaydında kalem varsa sayısını açıkça belirtir ve yalnız ortak doküman havuzunda ayrı cetvel bulunamadığını söyler. Kaynaklar sessizce birleştirilmedi; resmi dokümanla kontrol gereği korunur. Ortak liste doluyken başlık kaynağını belirtir.
|
||
|
||
Ortak havuz istemcisi HTTP hata/bozuk yanıtı boş liste gibi sunmaz. Panel hata ve yeniden yükleme düğmesi gösterir. Otuz saniyelik bekleme sınırı, ihale değişiminde iptal ve İKN başına yeniden oluşturulan panel durumu eklendi; önceki ihalenin filtre/kalemleri yeni ihaleye taşınmaz.
|
||
|
||
Gerçek tarayıcı kabulü: localhost:5175 QA Giresun detayında “İhale kaydında aşağıda gösterilen 1 kalem var” mesajı ve “Malzeme / Kalem Listesi (1 Kalem)” tablosu birlikte doğrulandı. Kanıt: `qa-items-source-message.json`. Bu sentetik veriyle kaynak gösterimi testidir; resmi cetvel doğruluğu veya tüm kaynak uyuşmazlıklarının çözümü değildir. Ağ hatası/iptal/zaman aşımı ise otomatik testlerde sınandı.
|
||
|
||
Tüm 106 test ve üretim derlemesi geçti. Büyük paket uyarıları sürüyor. Planın tamamı ve canlı yayın açık.
|
||
|
||
### D01 / D07 — Hazırlık belgelerinde ihale kapsamı
|
||
|
||
Hazırlık belge seçicisi bütün depo kayıtlarını sunuyor; son kontrolde dosya erişimi, sürümü ve son kullanımı denetlenirken İKN/tür kapsamı kontrol edilmiyordu. Böylece aynı hesaba ait başka ihalenin dokümanı mevcut hazırlığa bağlanabiliyordu.
|
||
|
||
Yeni kapsam denetimi firma belgelerini yeniden kullanılabilir tutar; `ihale` türündeki dosyalar yalnız mevcut İKN ile eşleşince kullanılabilir. Türü bilinmeyen veya ihale bağlantısı olmayan kayıtlar açık hata verir. Seçici uygun dosyaları listeler; önceden bağlanmış uygunsuz dosyayı görünür bir “kullanılamıyor” seçeneğiyle korur, sessizce başka dosya seçmez. Genel hazır olma kontrolü ve çıktı öncesi güncel envanter kontrolü aynı İKN bağlamını kullanır.
|
||
|
||
Belge kontrol sürümüne tür ve İKN eklendi. Bu alanların değişmesi yeniden inceleme gerektirir; eski sürüm biçimiyle kaydedilmiş bağlantılar da güvenli biçimde yeniden seçim/kontrol ister. Bu, belgelerin gerçek yeterlik içeriğini otomatik doğrulamaz.
|
||
|
||
Testler: başka ihale belgesi reddi, aynı ihale kabulü, firma belgesinin yeniden kullanımı, tüm hazırlık kontrolüne kapsamın yansıması, tür/bağ değişiminde inceleme geçersizliği. Tarayıcıda yeni seçici kapsamı kabulü halen açık.
|
||
|
||
Sonuç: Tüm 108 test ve üretim derlemesi geçti. Büyük paket uyarıları sürüyor. Planın tümü bitmedi; canlı yayın yapılmadı.
|
||
|
||
### D06 — Açıkça yüklenen kaynağın önceliği
|
||
|
||
`ihaleMetni` 200 karakterden kısa yüklenmiş metni görmezden gelip EKAP dokümanı/ilanına geçiyordu. Kısa fakat önemli bir zeyilname veya şart böylece başka kaynaktan gelen yanıtla karışabiliyordu. Artık açıkça verilen, boş olmayan metin uzunluğundan bağımsız olarak aynen kullanılır. Boş/geçersiz açık metin hata verir. Denetim ve taslak üretiminin bu hatayı yakalayıp boş kaynakla devam etmesi de kaldırıldı.
|
||
|
||
Ön yüzde seçilen dosya adı ve karakter sayısı görünür. Boş metin çıkarımı önceki kaynağı değiştirmez; aynı dosyayı tekrar seçmek mümkündür. İlan kaynağına dönüş açık bir kaldır düğmesiyle yapılır. Kaynak değiştirilince yanıt/denetim temizlenir; düzenlenmiş taslak bölümleri korunur ve eski kaynakla üretildikleri uyarısı gösterilir.
|
||
|
||
Testler doğrudan `ihaleMetni`, `teklifDenetle` ve `teklifTaslak` üzerinden kısa 120 günlük kaynak ile farklı 60 günlük ilan önceliğini, boş/geçersiz metin reddini ve hata yutulmamasını doğrular; dış kaynak veya model çağrısı yapılmaz. Dosya seçici ve kaynak değiştirme tarayıcı kabulü açık. Tam kaynak sürümleme ve ortak analiz kapsamının tamamı kapanmış sayılmaz.
|
||
|
||
Tüm 111 test ve üretim derlemesi geçti. Büyük paket uyarıları sürüyor. Canlı yayın yapılmadı.
|
||
|
||
### D06 — Çok kalemli ve uzun taslak denetimi
|
||
|
||
Denetim için ilk 30 ihale kalemi/ilk 60 gereklilik sınırı kaldırıldı; açıkça verilen koşullar ve ihale kalemleri tam listeye alınır. Taslağın 60.000 karakterde kesilmesi kaldırıldı. Denetim, gereklilik grupları ile taslak bölümlerinin tüm kombinasyonlarını en fazla iki eşzamanlı çağrıyla çalıştırır. Her çağrı 8.000 karakterlik gereklilik grubu ve 10.000 karakterlik taslak bölümü sınırlarıyla hazırlanır; genel şartname analizinin farklı çıktı şemasına sahip birleştiricisine gönderilmez.
|
||
|
||
Her parçadaki karar gerçek taslak alıntısı ve gereklilik eşleşmesiyle kontrol edilir. Bir gereklilik ancak tüm taslak bölümleri başarıyla incelenmişse ve bir bölümde gerçek alıntıyla karşılanmışsa karşılanıyor sayılır. Bütün bölümlerde eksikse eksik; başarısız bölüm varsa veya hiçbir bölümde doğrulanmış kanıt yokken belirsiz karar varsa belirsizdir. Hiç bölüm denetlenemezse hata döner. Ekran gereklilik grubu, taslak bölümü ve başarısız kontrol sayısını gösterir.
|
||
|
||
Sınırlar: Bölümler arasına yayılan kanıt insan kontrolü gerektirebilir. İlan metninden anahtar sözcükle gereklilik seçimi halen sınırlıdır; bu değişiklik tüm resmi şartların çıkarıldığını kanıtlamaz. Taslak üretiminin ayrı gereklilik sınırları bu turda değiştirilmedi. Uzun denetimin sunucuda kalıcı iş/iptal ve istemci zaman aşımı sonrası izlenmesi halen açık. Tek bir 8.000 karakteri aşan gereklilik kesilmez; kullanıcıdan bölmesi istenir.
|
||
|
||
Testler: gerçek toplama fonksiyonunda 100 kalem + 80 açık koşul; denetim yürütücüsünde 100 gereklilik, 60.000 karakter sonrasındaki kanıt, bounded çağrı boyutu ve başarısız bölümün belirsizliğe dönüşmesi. Model yanıtları bu testte sentetiktir; gerçek sağlayıcı ve uzun tarayıcı kabulü değildir.
|
||
|
||
Sonuç: Tüm 114 test ve üretim derlemesi geçti. Büyük paket uyarıları sürüyor. Planın tamamı bitmedi; canlı yayın yapılmadı.
|
||
|
||
### D06 / D09 — Uzun AI denetiminde bağlantı iptali
|
||
|
||
Önceden istemci zaman aşımına uğrasa veya teklif asistanı kapansa da sunucu kalan denetim bölümlerini ve sağlayıcı yedeklerini çalıştırabiliyordu. Teklif Asistanı bileşeni kapanınca kendi HTTP isteğini iptal eder. Sunucu teklif araçlarında yanıt bağlantısının erken kapanması bir iptal sinyali üretir; normal istek gövdesinin bitmesi iptal sayılmaz.
|
||
|
||
Sinyal soru/denetim/taslak çağrılarından AI sağlayıcı fetch'lerine taşınır. İptal sonrasında yedek sağlayıcı denenmez; çok parçalı denetim ve genel analiz yeni gruplara devam etmez, iptal kısmi başarı gibi dönmez. Dinleyiciler ve zamanlayıcılar tamamlanmada temizlenir. Sağlayıcıya gönderilmiş işlemin sağlayıcı tarafında ücretlendirilmesinin/hesaplanmasının geri alınması garanti edilmez.
|
||
|
||
Testler: gerçek yerel HTTP isteğinde gövde tamamlandıktan sonra bağlantıyı keserek iptal; sağlayıcı fetch'ini iptal edip tek çağrı ve sıfır yedek deneme; sonraki denetim gruplarının durması; görünüm iptalinde istemci fetch'inin sonlanması. Sağlayıcı yanıtları ağ dışına çıkmayan test taklididir. Tüm 118 test ve üretim derlemesi geçti.
|
||
|
||
Sınırlar: İlan/doküman kaynak ediniminin kendi alt istekleri ve OCR bu iptal zincirinin tamamına henüz bağlı değil. Kalıcı iş kuyruğu, yeniden başlatmada sürdürme ve tarayıcıdan uzun başarılı denetim kabulü açık. Büyük paket uyarıları sürüyor. Canlı yayın yapılmadı.
|
||
|
||
### D06 — PDF / OCR iptal desteği
|
||
|
||
Belge okuyucuya isteğe bağlı AbortSignal eklendi. İptal bekleyen dosya metni, PDF açılışı, sayfa edinimi/metni ve OCR sonucunu beklemeyi keser; sonraki sayfalara geçilmez. PDF yükleme görevi, etkin çizim ve OCR çalışanı iptal/sonlanma yolunda temizlenir. Çalışan oluşturulması veya sayfa edinimi iptalden sonra sonuçlanırsa geç gelen kaynak kapatılır. İptal hatası normal bozuk dosya/OCR hatasına çevrilmez.
|
||
|
||
Teklif Asistanı dosya okuması görünümün yaşam süresi sinyalini kullanır. Böylece modal/sekme bileşeni kapanınca yalnız sonuç atılmakla kalmaz, okuyucu da iptal edilir. Diğer belge okuma girişlerinin tamamı henüz bu sinyali iletmiyor; uygulama genelinde OCR iptali tamamlandı sayılmaz.
|
||
|
||
Testler: bekleyen OCR sırasında iptalde tek sayfa ve temizlik; geciken sayfa ediniminde temizlik; geç sonuçta iptal callback'inin ikinci kez çağrılmaması; normal tamamlanma sonrasında dinleyici temizliği. Mevcut gerçek 45 sayfalık PDF okuma testi de geçti. Gerçek tarayıcıda Tesseract çalışanı sırasında iptal kabulü bu turda yapılmadı.
|
||
|
||
Sonuç: Tüm 122 test ve üretim derlemesi geçti. Büyük paket uyarıları sürüyor. Planın kalan kapsamı açık; canlı yayın yapılmadı.
|
||
|
||
### D01 / D06 — Depodan yeniden okumada iptal ve özel metin koruması
|
||
|
||
Kayıtlı belge okuyucusu isteğe bağlı iptal sinyalini indirme, yanıt gövdesi ve PDF/OCR çıkarımına taşır. Başlangıç oturumu sabitlenir; belge metni döndürülmeden ve PDF işlemine geçilmeden güncel oturum kontrol edilir. DocumentVault yeniden çıkarımı ekranın yaşam süresi sinyalini kullanır; ekran kapanınca okuma durdurulur.
|
||
|
||
Yeniden çıkarımda kullanıcı iptali gerçek okuma hatası gibi kaydedilmez. İptal ve hesap değişimi sonrası `read-error` veya ortak kalem yayınına devam edilmez. Ağ/dosya hatasının mevcut sürüm kontrollü hata kaydı davranışı korunur.
|
||
|
||
Test: gerçek yardımcı fonksiyon üzerinden iptal edilen DOCX okumasında yalnız bir metin isteği, sıfır hata kaydı/kalem yayını; hesap değişimi sonrasında gelen özel Office metninin reddi. Diğer belge ekranları ve çalışan Office sunucu çıkarımının iptali bu turda tamamlanmadı; tarayıcıdan depo kapanış kabulü açık.
|
||
|
||
Sonuç: Tüm 124 test ve üretim derlemesi geçti. Büyük paket uyarıları sürüyor. Plan henüz tamamlanmadı; canlı yayın yapılmadı.
|
||
|
||
### D01 / D06 — İhale belge panelinin işlem yaşam süresi
|
||
|
||
TenderDocuments hesabı ve İKN'yi anahtar alan ayrı oturum bileşenine taşındı. Bileşen kapanırken PDF/metin okuma sinyali iptal edilir; panel durum güncellemeleri başlangıç oturumu ve etkin görünümle sınırlandırılır. Önizleme, yeniden çıkarım, tek belge analizi ve birleşik evrak okuma aynı sinyali kullanır. Toplu okumada iptal “atlanmış belge” olarak yutulmaz, kalan belgeler ve yeni AI başlatma durur.
|
||
|
||
PDF yüklemesinden sonra hesap/ihale değişirse çıkarım ve ortak kalem yayınına geçilmez. İptal, okuma hatası kaydı oluşturmaz. AI penceresi açılmadan ve incelenmiş metin analizinden sonra etkin oturum yeniden kontrol edilir. İlan metni edinimi de iptal sinyalini alır. Önceden başlamış AppContext genel AI çağrısının tam iptali ayrı iştir; bu değişiklik başlamış her sunucu işlemini durdurduğu iddiasını taşımaz.
|
||
|
||
Doğrulama: mevcut 124 test ve üretim derlemesi başarılı. Bu tur yeni birim test eklenmedi; önceki okuyucu/oturum testlerinin kapsadığı yardımcıların panel bağlantıları tamamlandı. İhale değişimi sırasında gerçek OCR ve toplu okuma tarayıcı kabulü açık. Büyük paket uyarıları sürüyor. Canlı yayın yapılmadı.
|
||
|
||
### D09 — Belge önizlemesi ve ihale geçişi tarayıcı kabulü
|
||
|
||
Çalışan localhost:5175 test sunucusu yeniden başlatılmadan güncel ön yüzle kontrol edildi. QA Giresun → Yapay Zeka Asistanı → kayıtlı `document-readable.pdf` → Metni incele akışında gerçek PDF dosyası 1/1 sayfa olarak okundu; sentetik dosyanın tam metni ve önceki inceleme sürüm 2 görüntülendi.
|
||
|
||
Listeye dönüp QA Kayseri açıldığında önceki dosya adı, PDF metni ve inceleme paneli görünmedi; yeni ihale “Henüz belge yüklemediniz” durumunu gösterdi. QA Giresun tekrar açıldığında kayıtlı PDF yerindeydi, önizleme kendiliğinden açık kalmadı. Böylece belgeyi silmeden geçici panel durumunun ihale bazında temizlendiği doğrulandı.
|
||
|
||
Kanıt: `qa-tender-document-switch.json` (önizleme, diğer ihale ve ilk ihaleye dönüş DOM metinleri; yedi kabul kontrolü doğru). Bu test tamamlanmış düz metin PDF okumasından sonraki geçiştir; hâlen süren OCR iptalini veya hesap değişimini doğrulamaz. Gerçek firma belgesi/başvuru kullanılmadı. Bu tur kod değişikliği olmadığı için önceki 124 test ve build yeniden çalıştırılmadı. Planın kalan kabul işleri ve canlı yayın açık.
|
||
|
||
### D02 / D03 — Son teklif anında hazırlık ve çıktı kontrolü
|
||
|
||
Hazırlık formunun hazır hesabına doğrulanmış gelecek tarih/saat kontrolü eklendi. Saati/tarihi bilinmeyen, süresi geçen, iptal/sonuçlanmış ihale için hazır teklif çıktısı kapalıdır; kullanıcı taslak kaydetmeye devam edebilir. Ekran durumu otuz saniyede yenilenir; çıktı tıklamasında, güncel belge kontrolünden sonra ve Excel dosyası hazır olduğunda gerçek saat yeniden kontrol edilir. Böylece dosya üretilirken son teklif anı geçerse eski hazır durumuyla indirmeye devam edilmez.
|
||
|
||
Tarih/saat ayrıştırması hatalı bitişik ekleri (ör. `10:0099`) geçerli saat kabul etmez. Mevcut Türkiye saat dilimi ve kaynak tarih doğrulaması kullanılır.
|
||
|
||
Testler: son teklif anından bir milisaniye önce/sonra; bilinmeyen/geçersiz tarih ve saat; gelecekte tarih taşısa da iptal/sonuçlanmış kayıt. Tüm 127 test ve üretim derlemesi geçti. Gerçek tarayıcıda zamanı geçen uzun çıktı kabulü henüz yapılmadı. Büyük paket uyarıları sürüyor. Planın diğer işleri ve canlı yayın açık.
|
||
|
||
### D01 / D05 — Ortak kalem deposu hata ve test ayrımı
|
||
|
||
SQLite desteği olmayan ortamda ortak kalem deposu artık boş liste gibi görünmez; hata verir. Depo bağlantısı ancak WAL ve şema kurulumu başarılı olduktan sonra önbelleğe alınır. Başarısız açılışın bağlantısı kapatılır; sorun giderilince aynı süreçte yeniden deneme mümkündür. Kalem listeleme/arama endpointleri erişim sorununu anlaşılır 503 yanıtıyla döndürür.
|
||
|
||
`IHALEIST_SHARED_DATA_DIR` ile ortak kalem deposu dizini yapılandırılabilir. Tarayıcı QA ve HTTP test sunucuları ortak kalem verisini kendi geçici dizinlerinde tutacak şekilde güncellendi. Önceden başlatılmış test süreçleri yeniden başlatılmadı; mevcut veri dosyaları silinmedi. Diğer ortak veri depolarının tamamı bu değişiklikle izole edilmiş sayılmaz.
|
||
|
||
Test: bozuk gerçek SQLite dosyasıyla açılış başarısızlığı, dosyanın onarılmasından sonra aynı süreçte boş liste ve yeni kalem yazma/okuma. Tüm 128 test ve üretim derlemesi geçti. HTTP testinin yeni izole depo ayarı sonrasında dört HTTP kabul testi ayrıca geçti. Canlı sistemde yapay arıza oluşturulmadı. Büyük paket uyarıları ve planın kalan kapsamı açık; canlı yayın yapılmadı.
|
||
|
||
### D05 — Ana aramada kalem kaynağı durumu
|
||
|
||
Ortak kalem araması başarısız olduğunda istemci boş dizi, AppContext ise sessiz boş durum üretiyordu. Artık servis HTTP/geçersiz yanıt hatalarını ayrı döndürür; istek iptal edilebilir ve otuz saniyede zaman aşımına uğrar. Ana aramanın kalem sonuçları sorguya bağlı yükleniyor/tamamlandı/hata durumları taşır. Sorgu değişikliği önceki isteği iptal eder; geç yanıt/hata yeni sorguya atanmaz.
|
||
|
||
Liste kalem araması sürerken sonuçların genişleyebileceğini, hata olduğunda yalnız başlık/kurum/yüklü kart aramasıyla devam edildiğini ve sonuçların eksik olabileceğini açıklar. Kalem aramasını yeniden deneme düğmesi eklendi. Gerçek boş kalem sonucu hata sayılmaz.
|
||
|
||
Doğrulama: boş başarılı sonuç, depo 503 hatası ve iptal edilmiş arama için servis testi. Mevcut sorgu eşleşmesi testleriyle birlikte tüm 129 test ve üretim derlemesi geçti. Yeni hata durumunun tarayıcı kabulü açık. Büyük paket uyarıları sürüyor; canlı yayın yapılmadı.
|
||
|
||
### D09 — API anahtarı hata, oturum ve iptal akışı
|
||
|
||
İlk listeleme hatasında boş `durum.anahtarlar` erişimi kaldırıldı; yükleme/hata/boş liste ayrı gösterilir. Hesap ve token bazında anahtar ekranı yeniden kurulur; eski oturum yanıtları uygulanmaz. Oluşturma/iptal çift tıklaması engellenir; liste alınmadan oluşturma açılmaz. İptal yanıtı plan limitini korur ve iptal edilen tek seferlik anahtar kutusu temizlenir. Pano başarısı ancak gerçek kopyalama tamamlanınca gösterilir; hata görünürdür.
|
||
|
||
API anahtarı istemcisinde 30 saniye zaman aşımı, yanıt biçimi kontrolü ve yanıt sonrası oturum kontrolü eklendi. Sonucu alınamayan mutasyon otomatik tekrarlanmaz; kullanıcı listeyi kontrol etmeye yönlendirilir. Liste yenileme hatası yeni oluşturulmuş anahtarı silmez.
|
||
|
||
Doğrulama: boş başarılı liste, 503, geçersiz JSON/veri, geç gelen farklı oturum yanıtı ve zaman aşımında tek oluşturma isteği. Gerçek izole yerel HTTP sunucusunda oluşturma → gizli alanları içermeyen liste → MCP initialize erişimi → son kullanım zamanı → iptal → 401 zinciri geçti. Başka hesap iptal edemedi; iptal yanıtında limit korundu. Test anahtarları geçici veritabanında tutuldu ve çıktıya yazılmadı.
|
||
|
||
Sonuç: 132 test başarılı; üretim derlemesi geçti. Tarayıcıda hata/hesap değişimi/kopyalama kabulü henüz yapılmadı. Büyük paket uyarıları ve D01–D11 kalan işleri açık. Canlı yayın yapılmadı.
|
||
|
||
### D09 — API anahtarı tarayıcı kabulü
|
||
|
||
Yeni, izole localhost:5176 test sunucusunda görünür test kontrol ekranıyla yalnız anahtar listeleme isteğine 503 hatası uygulandı. API ekranı çökmedi; hata ve yeniden deneme göründü, oluşturma kapandı. Kontrol ekranından hata kaldırılınca aynı uygulama ekranındaki yeniden deneme 0/10 listesini getirdi. Gerçek test anahtarı oluşturuldu: tek seferlik kutu, ad ve 1/10 sayacı görüldü. İptal sonrası kutu kayboldu, liste boşaldı ve limit 0/10 olarak korundu.
|
||
|
||
Normal test hesabına görünür giriş ekranından geçildiğinde 0/0 limit, Kurumsal plan açıklaması ve kapalı oluşturma görüldü. Önceki anahtar adı görünmedi. Bu geçiş tam sayfa yüklemesiyle yapılmıştır; devam eden istek sırasında hesap değişimi bu tarayıcı kontrolünde kanıtlanmış değildir. Pano izin hatası da açık kabul maddesidir.
|
||
|
||
Kanıt: qa-api-key-lifecycle.json, sekiz kontrol doğru. Anahtar değeri ve öneki kanıtta maskelendi; oluşturulan anahtar test sonunda iptal edildi. Test yardımcısındaki hata kontrolleri yalnız yerel QA sunucusundadır, üretime dahil değildir. Üretim kodu değişmediğinden önceki 132 test/build tekrarlanmadı; QA değişikliği çalışan tarayıcı akışıyla doğrulandı. Tam plan ve canlı yayın açık.
|
||
|
||
### D06 — Çok kalemli taslak üretiminde kaynak kapsamı
|
||
|
||
Taslak üretimi artık açık kalem/koşul listesinin tamamını, depodaki tüm belge adlarını ve kesilmemiş firma/fiyat bilgisini kullanır. Tam kaynak metni de bağlama eklenir; önceki altı anahtar sözcüklü özet tek kaynak değildir. Uzun taslak bağlamı 16.000 karakterlik kayıpsız parçalara ayrılır; en fazla iki sağlayıcı çağrısı eşzamanlıdır. Genel şartname analizinin farklı veri şemasıyla bölüm birleştirmesi kullanılmaz.
|
||
|
||
Taslak bölümleri istenen başlıklara göre, kaynak sırasıyla birleştirilir; başarısız parçada açık DOLDURUN alanı kalır. Ek model bölümleri kaynak numarasıyla korunur. Çok parçalı sonuç her zaman kısmi inceleme durumundadır: tekrarların/çelişkilerin giderildiği veya bütün şartların karşılandığı iddia edilmez. Kaynak özeti, parça aralıkları ve başarısızlıklar kaydedilir. İptal yeni grupları durdurur.
|
||
|
||
Doğrulama: 50 bin karakteri aşan kaynakta tüm karakterlerin sağlayıcı yardımcı çağrılarına kayıpsız ulaşması, son koşulun birleşik bölümde korunması, ara parça hatasının görünürlüğü, iptalde sonraki grupların durması. Sağlayıcı yanıtları yerel test taklididir; gerçek uzun belge üretim kalitesi/tarayıcı kabulü değildir. Tüm 135 test ve üretim derlemesi geçti.
|
||
|
||
Sınırlar: Bir parçanın işlenmesi tüm şartlarının anlam bakımından taslağa doğru aktarıldığını kanıtlamaz. İki dakikalık istemci sınırı ile kalıcı iş/sürdürme ihtiyacı açık; gerçek firma ve beş resmi dosya kabulü yapılmadı. Büyük paket uyarıları sürüyor; canlı yayın yok.
|
||
|
||
### D09 — API anahtarı kotasının işlem bütünlüğü
|
||
|
||
Önceki uç nokta anahtar sayısını okuyup kotayı kontrol ettikten sonra istek gövdesini bekliyordu; bekleyen eşzamanlı istekler aynı boş kapasiteyi kullanabilirdi. Sayım, kota denetimi ve INSERT artık BEGIN IMMEDIATE işlemi içinde; başarısızlık geri alınır. İptal edilmiş anahtarlar aktif kotaya katılmaz. Sunucudaki güncel plan limiti kayıt işlevine aktarılır.
|
||
|
||
Bozuk JSON'un boş gövdeye çevrilip varsayılan anahtar oluşturması kaldırıldı. Anahtar adı metin ve en fazla 120 karakter olmalı; çevresindeki boşluklar temizlenir. GET/POST/DELETE dışındaki metotlar 405 döner.
|
||
|
||
Doğrulama: yerel izole HTTP testinde eşzamanlı 16 oluşturma isteğinden tam 10 başarı, 6 kota reddi; bir anahtar iptal edilince yeni kayıt mümkün. Bozuk JSON/geçersiz ad kayıt oluşturmuyor. Gerçek SQLite testinde kota reddi sonrası işlem kapanıyor, iptal ve yeni kayıt çalışıyor. Tüm 137 test geçti; ön yüz değişmediğinden derleme tekrarlanmadı. Farklı sunucu süreçlerinden yük testi yapılmadı. Planın diğer kabul işleri ve canlı yayın açık.
|
||
|
||
### D09 — Araç ekranlarını ihtiyaç anında yükleme
|
||
|
||
19 araç görünümü başlangıçtaki statik importlardan çıkarıldı; kullanıcı ilgili menüyü açınca dinamik yüklenir. Yükleme durumu erişilebilir status olarak gösterilir. Görünüm yüklenemezse hata sınırı yalnız o görünümü kapsar; yeniden deneme ana uygulamayı veya kayıt durumunu yeniden başlatmaz. Yönetici ekranının mevcut yetki koşulu korunur.
|
||
|
||
Üretim derlemesi ölçümü: ana JavaScript 1.097,39 KB'den 526,09 KB'ye (gzip 306,24 KB'den 156,35 KB'ye) düştü. Grafik ortak paketi 384,20 KB olarak ayrıldı. Bunlar dosya boyutlarıdır; gerçek ağda ilk açılış süresi/LCP ölçülmüş değildir. 940 KB ExcelJS ve 500 KB üstü ana paket uyarıları hâlâ var; performans maddesi tamamen kapanmadı.
|
||
|
||
Yerel tarayıcı kabulünde KDV, API, Belge Kasası ve Analitik ekranları açıldı; ana ihale listesine dönüşte beş sentetik ihale korundu. Kanıt qa-deferred-views.json. Geliştirme sunucusunda menü geçişi kabulüdür; üretim paketi ağ hatası/yeniden deneme ve tüm 19 ekranın etkileşim kabulü değildir. Tüm 137 test ve üretim derlemesi geçti. Canlı yayın yapılmadı.
|
||
|
||
### D06 / D07 — Hazırlıkta yeterlik ve risk bilgisinin korunması
|
||
|
||
Hazırlık taslağı daha önce analizden yalnız kalem/belge listesi, kaynak sürümü ve teklif koşullarını saklıyordu. Yeterlik, kritik şart, ceza, değerlendirme dışı kalma riski, kritik ayrıntı, takvim ve maliyet yükümlülüğü gibi bilgiler yeni ortak hazırlık kaynak seçicisiyle saklanır; kaynak kanıtı, alıntılar, özet ve kapsam da korunur.
|
||
|
||
Kaynak karşılaştırma imzasına bu bilgiler dahil edildi. Aynı doküman sürümünden yeni bir kritik şart çıkarılması artık eski kaynak onayını geçerli bırakmaz. Eski kayıtlar yeni imzayla yeniden kontrol gerektirir; fiyatlar/kullanıcı düzeltmeleri silinmez. Hazırlık formunda yeterlik/risk/koşullar başlangıçta açık bir bölümde gösterilir; genel karşılaştırma beyanı bunları da kapsar. Listenin eksiksiz veya koşulların karşılanmış olduğu iddia edilmez.
|
||
|
||
Test: taslak kaynak verisinin JSON kaydetme/okuma turunda yeterlik, ceza ve kanıtı koruması; kayıt öncesi/sonrası imzanın eşitliği; sekiz koşul kategorisindeki değişiklikte eski onayın geçersizleşmesi. Tüm 138 test ve üretim derlemesi geçti. Yeni koşul bölümünün tarayıcı/gerçek dosya kabulü açık. Büyük paket uyarıları sürüyor; canlı yayın yapılmadı.
|
||
|
||
### D01 — Belge silme ve fiziksel temizleme tutarlılığı
|
||
|
||
Önceden dosya önce siliniyor, ardından veritabanı kaydı kaldırılıyordu; SQL hatası sağlam belgenin baytlarını geri getiremiyordu. Şimdi belge/review kayıtlarının kaldırılması ve dosya temizleme kuyruğu aynı transaction içinde kaydedilir. Fiziksel unlink yalnız commit sonrasında yapılır. SQL hatasında dosya ve kayıt korunur.
|
||
|
||
Fiziksel temizleme başarısızsa belge uygulamadan erişilemez durumdadır; `document_file_cleanup` kuyruğu korunur ve sonraki veritabanı açılışlarında en fazla 100 dosya yeniden denenir. Yeniden başlatma için bellek içi görev gerekmez. Hâlen başka kayıt tarafından kullanılan dosya silinmez; belge dizini dışındaki yollar işlenmez. Bu, mantıksal silme ile fiziksel temizlemeyi ayırır; API başarısı kaydın erişimden kaldırıldığını ifade eder, bütün fiziksel baytların hemen temizlendiğini değil.
|
||
|
||
Migration sayısı 5 oldu. Testler: DELETE trigger hatasında gerçek dosya baytlarının ve kaydın korunması; dosya sistemi hatası için dosya yolunda dizinle unlink başarısızlığı; kayıt erişiminin kapanması; kuyruk kaydının yeniden açılışta korunması; sorun giderilince temizlenmesi. Eski unlink-hatasında-kayıt-kalır testi yeni kalıcı kuyruk sözleşmesine güncellendi. Tüm 140 test geçti. Üretim kodunda yalnız sunucu/depo değiştiğinden ön yüz derlemesi tekrarlanmadı. Zorla süreç öldürme/güç kesilmesi kabulü yapılmadı. Canlı yayın ve tam plan açık.
|
||
|
||
### D01 — Belge silmede gerçek süreç kesintisi kabulü
|
||
|
||
İzole geçici volume kullanan iki çocuk süreçte gerçek SIGKILL testi eklendi. İlkinde belge DELETE işlemi çalıştıktan sonra COMMIT öncesinde süreç durduruldu; ikinci durumda COMMIT sonrası fiziksel unlink başlamadan durduruldu. Kontrol noktasında dosyanın hâlâ diskte bulunduğu doğrulandı. Enjeksiyon yalnız test çocuk sürecindeki metotlarla sınırlıdır; üretimde hata tetikleyicisi eklenmedi.
|
||
|
||
Her durumda ayrı yeni süreç kullanıcı deposunu açtı. Commit öncesi kesintide kayıt ve özgün Türkçe dosya baytları korundu; commit sonrası kesintide kayıt yoktu ve kalıcı temizleme görevi yeni süreçte dosyayı kaldırdı. İki durumda da PRAGMA integrity_check sonucu ok, kuyruk sıfırdı. Bu, uygulama süreci kesilmesinin kabulüdür; donanım güç kaybı/dosya sistemi arızası veya bütün production rollback kabulü değildir.
|
||
|
||
Tüm 142 test geçti. Üretim kodu değişmediği için derleme tekrarlanmadı. D01'in bu kesinti maddesi kanıtlandı; diğer plan maddeleri ve canlı yayın açık.
|
||
|
||
### D04 / D05 — Son kayda göre kaynak değişikliği uyarısı
|
||
|
||
Takip/hazırlık kaydıyla saklanan ihale özetine durum ve doküman sürümü eklendi. Canlı havuz verisi veya ayrıntı metni geldiğinde son kaydedilen özetle tarih, saat, durum, başlık, idare, alım türü ve sürüm karşılaştırılır. Bilinmeyen eski alanlardan değişiklik uydurulmaz. Ayrıntı ekranı değişen alanların önce/sonra değerlerini ve kayıtların korunduğunu gösterir.
|
||
|
||
Kullanıcı durumu İKN üzerinden birleştirilir; kaynak kimliği değişse de not ve fiyat taslağı korunur. İhale durumunun değişmesi hazırlık kaynak onayını da geçersizleştirir. Bu uyarı son kaydedilen bilgilere göre karşılaştırmadır; tüm zeyilname olaylarının kalıcı geçmişi değildir. Yeni kayıtta karşılaştırma tabanı güncellenir.
|
||
|
||
Test: tarih/saat/iptal/sürüm değişiminde doğru dört fark; değişen kaynak id'sine rağmen kayıtların korunması; eski bilinmeyen alanlarda yanlış uyarı olmaması; yeni tabanla farkın temizlenmesi. Tüm 144 test ve üretim derlemesi geçti; ayrıntı getirme bağlantısı sonrasında derleme yeniden doğrulandı. Yeni uyarının tarayıcı kabulü ve tam kaynak sürüm arşivi açık. Canlı yayın yapılmadı.
|
||
|
||
### D04 — Kalıcı kaynak gözlem geçmişi
|
||
|
||
Ortak veri dizininde `tender-history.sqlite` eklendi. Havuz derlemesinde ve havuzla eşleşen ilan.gov.tr ayrıntısı okunduğunda, izin verilen genel kaynak alanlarının SHA-256 karşılığı son kaynak sürümüyle karşılaştırılır. Aynı içerik yeni kayıt üretmez; A → B → A dönüşü iki ayrı değişiklik olarak saklanır. Eksik liste alanı önceki ayrıntıyı silmez. Kullanıcı notları, dosyaları ve firma verileri gözleme alınmaz.
|
||
|
||
Resmi İKN ortak ihale anahtarıdır; doğrudan temin numarası kurumla birlikte kapsamlanır. Kaynak kimlikleri ayrı izlenir; liste/ayrıntı farklı kaynak kanallarıdır. Gözlem zamanı kayıt zamanıdır, resmi zeyilname tarihi değildir. Kaynaklar arasındaki çelişkiyi birleştirip hangisinin doğru olduğunu belirlemez.
|
||
|
||
Oturum gerektiren sayfalı geçmiş API'si ve ayrıntı ekranında isteğe bağlı geçmiş görünümü eklendi. Önce/sonra metinleri açılabilir, daha eski kayıtlar getirilebilir. Boş geçmiş değişiklik yokluğunun kanıtı olarak sunulmaz. Kayıt hatası havuz uyarısına, okuma hatası yeniden denemeli ekran durumuna yansır. Kaynak kaydı yalnız uygulamanın gözlemlediği andan itibaren birikir; geçmişe dönük resmi zeyilnameler yüklenmiş değildir.
|
||
|
||
Doğrulama: gerçek SQLite yeniden açılışları, aynı veriyi tekrar alma, değer geri dönüşü, kaynak ayrımı, kurum kapsamlı DT kimliği, sayfalama; HTTP oturum/boş sonuç/geçersiz sayfa/metot. Tüm 147 test ve üretim derlemesi geçti. Son depo-açılış temizliği değişikliğinden sonra iki depo testi tekrar geçti. Canlı kaynak birikimi, tarayıcıdan dolu geçmiş ve zeyilname bildirim kabulü açık. Bu volume kullanıcı yedeğinin kapsamı dışında; tam D11 yedeğine ayrıca dahil edilmeli. Canlı yayın yapılmadı.
|
||
|
||
### D04 / D09 — Kaynak geçmişi tarayıcı kabulü
|
||
|
||
Yerel QA yardımcı sunucusu geçici gerçek SQLite deposuna ilk gözlem ve 22 saat değişikliği ekleyecek şekilde genişletildi. İlk tarayıcı denemesi test middleware'inin `/api/tenders` önekli bütün yolları örnek listeyle karşıladığını ortaya çıkardı. Eşleşme yalnız liste yoluna ve sorgusuna daraltıldı; çalışan test sunucusu bu kod değişikliği için kontrollü yeniden başlatıldı.
|
||
|
||
Gerçek geçmiş API'si üzerinden Giresun ayrıntısı → Kaynak değişiklik geçmişi → Geçmişi yükle akışında 20 kayıt; ilk Saat değişti başlığında Önce 11:00 / Sonra 10:00; Daha eski kayıtlar ile toplam 23 kayıt ve ilk gözlem; son sayfada devam düğmesinin kaybolması doğrulandı. Altı kontrol doğru. Kanıt qa-source-history.json. Veriler sentetik ve geçici; canlı resmi zeyilname kabulü değildir.
|
||
|
||
Yeni açılır başlıkların klavye erişimi için modal odak döngüsüne summary öğeleri eklendi. Üretim derlemesi geçti. Önceki 147 otomatik test bu yalnız QA/odak seçicisi turunda tekrarlanmadı. Ağ hata/yeniden deneme ve gerçek kaynak birikimi kabulü açık. Canlı yayın yapılmadı.
|
||
|
||
### D11 — Ortak veri volume'u yedeği ve geri yükleme
|
||
|
||
Kullanıcı yedeğine ek olarak bağımsız veri volume'u aracı eklendi. Seçilen dizinin normal dosyalarını alt dizinlerle kapsar; SQLite başlıklı dosyaları VACUUM INTO ile tutarlı kopyaya çevirir ve integrity_check uygular. İlgili WAL/SHM kopyalanmaz; committed WAL verisi snapshot'a dahil edilir. Diğer dosyalar boyut/akışlı SHA-256 ile doğrulanır. Manifest dışı dosya, eksik/değişmiş içerik, sembolik bağlantı, iç içe hedef ve mevcut hedef reddedilir. Hata durumunda yalnız yeni oluşturulan hedef temizlenir.
|
||
|
||
Testte iki depo (kalem ve kaynak geçmişi adlarıyla), committed WAL kaydı, alt dizin JSON dosyası yeni volume'a geri yüklendi. Üzerine yazma ve tahrif edilmiş yedek reddi geçti. Tüm 149 test başarılı. Üretim ön yüzü değişmediğinden derleme tekrarlanmadı. Runbook komutları ve sınırlar güncellendi.
|
||
|
||
Sınırlar: seçilen dizinler dışındaki worker depoları/config/env ayrıca envanter gerektirir; kullanıcı belgesi referans kontrolü kullanıcı yedek aracındadır. Gerçek servis durdurma, tüm volume'ların aynı sürüm setiyle alınması ve platformda geri dönüş yapılmadı. Tam D11 ve canlı yayın açık.
|
||
|
||
### D01 / D09 — Ortak hesap isteklerinin yaşam süresi
|
||
|
||
Plan, belge, kullanıcı verisi, bildirim ve hazırlık kaydı servislerinin ortak istemcisine oturuma bağlı istek/yanıt kontrolü, iptal sinyali ve 30 saniye zaman aşımı eklendi. Süre yalnız fetch başlığını değil yanıt gövdesinin okunmasını da kapsar. Dosya yükleme/işleme uç noktası için süre 120 saniye; kalıcı iş modeli bu değişiklikle tamamlanmış değildir.
|
||
|
||
Başlangıç token'ı istek boyunca sabittir; hesap değişimi sonrası özel yanıt döndürülmez. HTTP hata durumu, gövdede success=true olsa bile başarı sayılmaz. VERSION_CONFLICT/KOTA_ASILDI gibi kodlar korunur. Belge/bildirim listesi ve kullanıcı/hazırlık kayıtlarında eksik/geçersiz veri boş koleksiyona dönüştürülmez. Zaman aşımında kayıt işleminin sunucuda gerçekleşmiş olabileceği belirtilir; otomatik mutasyon tekrarı yoktur.
|
||
|
||
Test: yanlış şekilli başarılı yanıtlar, gerçek boş liste, HTTP 503, çatışma kodu, hiç tamamlanmayan JSON gövdesi, yazmada tek çağrı, geç özel yanıtta hesap değişimi ve önceden iptal. Tüm 152 test ve üretim derlemesi geçti. Tüm ekranların tarayıcı hata/yeniden deneme kabulü ve uzun işleri sürdürme hâlâ açık. Büyük paket uyarıları sürüyor; canlı yayın yok.
|
||
|
||
### D06 — Denetimde bütün kaynak parçalarından şart seçimi
|
||
|
||
Taslak denetimi için altı anahtar sözcüğün ilk 300 karakterlik örneklerini kullanma kaldırıldı. Kaynak metnin tamamı kayıpsız 6.000 karakterlik parçalarda şart seçimi için modele sunulur; iki çağrı eşzamanlı çalışır. Modelden yorum yerine gerçek koşul alıntıları istenir. Her alıntı tam olarak kendi kaynak parçasında bulunmalı; konumu, parça numarası ve kaynak hash'i kaydedilir. Geçersiz yanıt, uydurma alıntı veya başarısız kaynak parçası denetimi durdurur. Açık kalem/koşul listesiyle seçilen alıntılar birleştirilir ve mevcut çok parçalı taslak denetimine verilir.
|
||
|
||
UI kaynak karakter/parça/alıntı sayısını gösterir. Karşılanma yüzdesi hâlâ yalnız denetlenen liste içindir. Bütün parçaların taranması AI'ın tüm şartları eksiksiz seçtiğini veya alıntıyı anlam bakımından doğru değerlendirdiğini kanıtlamaz; parça sınırları, bağlam ve çelişen hükümler ayrıca incelenmelidir. Bu sınır kullanıcı açıklamasında korunur.
|
||
|
||
Test: 15 bin karakterlik metnin tüm karakterleri modele giden parçalarda, son şart ve tam konumu korunuyor; uydurma alıntı/geçersiz liste/ara sağlayıcı hatası reddediliyor; iptal sonraki grupları durduruyor. Sağlayıcı yanıtları yerel test taklididir. Tüm 155 test ve üretim derlemesi geçti; UI sayacı sonrasında derleme tekrar doğrulandı. Gerçek sağlayıcıyla uzun belge kalitesi, kalıcı iş/iki dakikadan uzun tamamlama ve beş resmi dosya kabulü açık. Canlı yayın yok.
|
||
|
||
### D06 — Kalıcı teklif asistanı işleri
|
||
|
||
Teklif asistanının soru, taslak denetimi ve taslak üretimi kalıcı işe bağlandı. İş girdisi ve sonucu kullanıcı veri dizinindeki ai-jobs.sqlite dosyasında tutulur; API erişimi hesapla sınırlıdır. Tekrar kullanılan istek kimliği aynı girdide aynı işi döndürür, farklı girdide reddedilir. Kullanıcı başına beş etkin iş ve işlemci başına iki eşzamanlı çalışma sınırı vardır.
|
||
|
||
İşlemci queued/running/completed/failed/interrupted/cancelled durumlarını kullanır. Çalışma kimliği ve heartbeat, eski işlemcinin geç yanıtla iptal/yeniden başlatılmış işi değiştirmesini engeller. Heartbeat kaybolursa iş interrupted olur; belirsiz sağlayıcı çağrısı otomatik tekrarlanmaz. Yeniden başlatma kullanıcı tarafından yapılır ve işi baştan çalıştırır; parça bazında checkpoint devamı değildir. İş başına 30 dakika sınırı vardır.
|
||
|
||
İstemci tek uzun HTTP isteği yerine işi oluşturur ve kısa durum istekleriyle sonucu bekler. Ekran kapanınca yalnız takip isteği kesilir; sunucu işi devam eder. Kayıtlı AI işleri bölümünde son 50 iş yenilenebilir, iptal/yeniden başlatılabilir; tamamlanmış işin kaynağı ve sonucu asistan ekranına geri açılabilir. Eski işi açmanın mevcut metni değiştirdiği belirtilir. Doğrudan eski API uçları uyumluluk için korunur.
|
||
|
||
Doğrulama: hesap ayrımı, idempotency, kesilen işin otomatik tekrarlanmaması, çalışma kimliği, iptal sonrası geç sonuç reddi, HTTP bağlantısından bağımsız sonuç kaydı; istemci oluşturma/poll/tamamlama ve ekran kapanınca silme çağrısı olmaması; HTTP yetki ve boş liste. Tüm 161 test ve üretim derlemesi geçti. Sağlayıcı testleri taklittir; gerçek uzun işlem/tarayıcı geri açma kabulü yapılmadı. Genel AI analiz ekranı henüz bu iş modeline bağlı değil. ai-jobs.sqlite kullanıcı yedek aracına otomatik dahil değildir; veri volume yedeğiyle ayrıca alınmalı. Canlı yayın yok.
|
||
|
||
### D06 / D09 — Kalıcı AI işinin ekran kapatma / geri açma kabulü
|
||
|
||
localhost:5178 QA sunucusu, yalnız test ortamında ücretli sağlayıcı yerine kontrollü bekleyen iş kullanacak şekilde genişletildi. İstemcinin iş oluşturması gerçek geçici ai-jobs.sqlite kaydına gider; liste/sonuç okuması gerçek uygulama API'sinden yapılır. Görünür QA kontrol ekranı tamamlanmayı tetikler. Üretim sağlayıcı veya işi çalıştıran üretim runner bu UI senaryosunda test edilmez; runner önceki otomatik testte kapsanmıştır.
|
||
|
||
Giresun → Teklif Asistanı → Taslak Üret → Kapak → Taslağı üret akışında işleniyor durumu ve kapalı üretme düğmesi görüldü. İhale penceresi kapatıldı; kontrol ekranından iş tamamlandı. Yeniden açılışta kayıtlı iş Tamamlandı göründü. Kaynak ve sonucu aç ile doğru kapak türü, kayıtlı taslak metni ve kullanıcı kontrolü uyarısı geri geldi. Altı kabul kontrolü doğru; kanıt qa-durable-ai-job.json.
|
||
|
||
Taslak türü seçicisine erişilebilir ad eklendi. Üretim derlemesi geçti. Önceki 161 otomatik test yalnız QA/etiket değişikliği için tekrarlanmadı. Gerçek uzun sağlayıcı, yüklenen PDF kaynağının geri açılması, kesinti/yeniden başlatma tarayıcı kabulü ve genel AI iş entegrasyonu açık. Canlı yayın yapılmadı.
|
||
|
||
### Kalıcı AI işlerinde kaynak sabitleme — 6 Eylül 2026
|
||
- İşçinin ilk çözdüğü metin, kaynak türü, SHA-256 ve edinim zamanı ayrı `resolved_input` sütununda saklanıyor. Ortak kalem deposundan gelen gereklilikler de bu aşamada kaydediliyor; yeniden deneme bunları yeniden okumuyor.
|
||
- İlk istek ve idempotency özeti korunuyor. Kaynağı yalnız etkin işçi bir kez kaydedebilir; iptal sonrası geç gelen veri reddedilir. Kullanıcıdan gelen `resolvedSource` alanı sunucuda yeniden oluşturulur.
|
||
- Metin bulunamaması da açık biçimde saklanır: tekrar çalıştırma sessizce farklı belge edinmez. Soru akışı kaynak yok hatasını, diğer akışlar mevcut eksik-kaynak davranışını korur.
|
||
- SQLite sütun geçişi işlem kilidi altında yapılır. Sahibe özel iş okuması sabitlenen girdiyi geri verir; eski tamamlanmış işlerin geçmişte edinilen kaynakları geriye dönük üretilemez.
|
||
- Doğrulama: 163 otomatik test geçti; üretim derlemesi geçti (büyük paket uyarısı sürüyor). Kaynak A → sağlayıcı hatası → tekrar deneme sırasında A'nın korunması, hesap izolasyonu, idempotency, iptal sonrası geç kaynak ve boş kaynak test edildi.
|
||
- Gerçek sağlayıcı/uzun belge ile canlı kabul ve genel AI ekranının kalıcı işlere taşınması henüz tamamlanmadı. Bu kayıt D06'nın bütünüyle bittiği anlamına gelmez.
|
||
|
||
### Genel şartname analizi için kalıcı işler — 6 Eylül 2026
|
||
- Genel/derin analiz istemcisi `analiz` türündeki kalıcı işe taşındı. İhale anahtarıyla listelenir; sayfa yenilense veya bağlantı kesilse de sunucu sonucu saklar. Eski doğrudan API uyumluluk için duruyor.
|
||
- Analiz ekranında kayıtlı genel analizleri açma, kaynak metnini görme, yeniden başlatma ve iptal kontrolleri eklendi. Teklif asistanının iş listesi kendi üç işlem türünü gösteriyor.
|
||
- Sunucu, insan incelemesi referansını sahibinin belgesinden çözer ve metni sabitler. İnceleme analizden önce veya sonra değişirse tamamlanmış sonuç üretilmez. Yeniden başlatma sabitlenmiş girdiyi kullanır; eski incelemeyi güncel gibi kabul etmez.
|
||
- Oturum başına eşzamanlı genel analiz başlatma kilidi eklendi; eski oturum işi yeni oturumun yükleniyor durumunu veya sonucunu değiştiremez. Farklı ihale seçilince önceki ihalenin analiz sonucu gösterilmez.
|
||
- Doğrulama: 167 otomatik test ve üretim derlemesi geçti. Yeni testler kaynak sabitleme, ihale bazlı iş bulma, sunucu incelemesi kullanımı, inceleme değişikliği ve iptal davranışını kapsıyor. Büyük paket uyarısı sürüyor.
|
||
- Bu yeni genel analiz ekranı için tarayıcıda kapat/aç/yenile kabul testi ve gerçek sağlayıcı testi henüz yapılmadı. Son 50 kayıt sınırı ve kesilen işi baştan başlatma davranışı sürüyor; ara parçadan devam etme yok. D06 ve tüm plan açık.
|
||
|
||
### Genel analiz tarayıcı kabulü ve liste güncellemesi — 6 Eylül 2026
|
||
- Yerel 5179 QA ortamında Giresun ve Kayseri sentetik ilanlarıyla genel analiz başlatıldı. Analiz ekranı kapatıldı, sayfa yeniden yüklendi, kontrollü sağlayıcı yanıtı tamamlandı; kayıtlı kaynak metni/dosya adı ve sonuç tekrar açıldı.
|
||
- İlk denemede yeni iş listede elle yenilemeden görünmüyordu. İstemci iş durumu değişikliklerini context'e aktarıyor; liste etkisi önceki devam eden okumadan bağımsız yenileniyor ve geç eski okumayı atıyor. İkinci denemede elle yenilemeden çalışan iş göründü.
|
||
- Sunucu anahtarı anlatan teknik uyarı normal kullanıcı için hizmet durumu mesajıyla değiştirildi. Simgeli kapatma düğmesi erişilebilir ad aldı.
|
||
- Kanıt: `qa-general-analysis-recovery.json`, 8 kontrol doğru. 167 otomatik test ve üretim derlemesi geçti.
|
||
- QA yalnız sentetik sağlayıcı sonucu kullanır; gerçek SQLite iş kaydı/okuması ve genel analiz yürütücüsü kullanıldı. İş başlatma QA tarafından tutulur: üretim işçi yaşam döngüsü, gerçek AI doğruluğu veya sunucu yeniden başlatma kabulü olarak değerlendirilmez.
|
||
|
||
### Kalıcı AI işçisi gerçek süreç kesintisi — 6 Eylül 2026
|
||
- Genel analiz ve teklif taslağı için kaynak kaydı tamamlandıktan sonra çalışan işçi alt süreci SIGKILL ile durduruldu. Kurtarma ayrı yeni süreçte gerçek iş deposu ve runner ile sınandı.
|
||
- Lease dolmadan çağrı yapılmaması, lease dolunca interrupted durumu, açık retry olmadan çağrı yapılmaması, retry sonrasında aynı kaynak/sonuç ve başka hesaba erişim engeli doğrulandı. Uzak kaynak B çözücüsü hiç çağrılmadı; sabit kaynak A kullanıldı. Her iki SQLite integrity_check sonucu ok.
|
||
- 169 otomatik test geçti. Üretim kodu değişmediği için önceki başarılı derleme tekrar edilmedi.
|
||
- Test lease değerlendirme saatini ilerletir; gerçek 60 saniyelik bekleme, gerçek sağlayıcı isteği, elektrik kesintisi veya platform deploy/volume kurtarma kabulü değildir. Tam D11 yayın/geri dönüş provası açık.
|
||
|
||
### Takvim dosyası ve bildirim deposu — 6 Eylül 2026
|
||
- ICS çıktısındaki DTSTART ile aynı ana yazılan DTEND kaldırıldı. Son teklif anı ek süre uydurmadan, TRANSP:TRANSPARENT olarak dışa aktarılır. RFC 5545 §3.6.1 ve §3.8.2.2: https://www.rfc-editor.org/rfc/rfc5545.html
|
||
- İhale tarihi değiştiğinde UID sabit kalır; dosya ve arayüz bunun otomatik takvim aboneliği olmadığını açıklar. Düğme “Takvim Dosyasını İndir (.ics)” olarak adlandırıldı. Tek başına UID, Google/Outlook dosya içe aktarımında mevcut kaydın güncelleneceğini garanti etmez.
|
||
- Tek başına CR karakteri de ICS metninde kaçırılıyor; ek VEVENT enjeksiyonu testi eklendi.
|
||
- Bildirim deposunun sabit server/data yolu, IHALEIST_USER_DATA_DIR ayarına bağlandı; varsayılan yol korunur. Yeni dosya izinleri 0600. İki ayrı süreçte kalıcılık ve hesap bazlı okundu işaretleme test edildi. Bu değişiklik test deposunun üretim bildirimleriyle karışmasını ve özel volume yedeğinin bildirimleri atlamasını önler.
|
||
- 171 test ve üretim derlemesi geçti. Özel veri dizini kullanan eski kurulumlar için takip.sqlite taşıma gereksinimi runbook'a eklendi. Üretim taşıması yapılmadı; gerçek Google/Outlook içe aktarımı ve zeyilname bildiriminin dış kanallara teslimi henüz kabul edilmedi.
|
||
|
||
### Bildirim okundu akışı — 6 Eylül 2026
|
||
- Bulgu: Header'daki “Tümünü Okundu İşaretle” yalnız span idi. Arka plan sorgusu ilk beş bildirimi geçici listeye ekleyip alınan bütün okunmamış kayıtları kullanıcı görmeden okundu yapıyordu; sonraki oturumda kayıtlara erişilemiyordu.
|
||
- Sunucu bildirimleri kararlı kimlikleriyle, okunma durumu korunarak listeleniyor. Listeyi almak okundu bilgisi yazmıyor. Menü açıldığında ve 5 dakikalık aralıkla yenileniyor; hatalar görünür ve tekrar yükleme düğmesi var. Son 50 sunucu kaydı kapsamı korunur.
|
||
- Gerçek okundu düğmesi sunucu yanıtından sonra yakalanan bildirim kümesini günceller; hata/kısmi yanıtta yerel durum değişmez. İşlem sırasında gelen yeni kayıtlar yanlışlıkla işaretlenmez. Hesap değişimi ve geç eski okuma yanıtları atılır.
|
||
- Sunucu okundu işlemi liste tip/boyut doğrulamasıyla tek transaction'da çalışır; yabancı hesap kayıtlarına erişemez. Desteklenmeyen HTTP metotları 405 döner; depoya erişilememesi boş liste gibi gösterilmez.
|
||
- 173 test ve üretim derlemesi başarılı. Yeni testler kimliklerin/okunmamış durumun korunmasını, kayıt hatası/kısmi yanıtı ve işlem kümesini doğrular. Menü hata→tekrar deneme ve sayfa yenileme sonrası okundu davranışının tarayıcı kabulü henüz yapılmadı. Dış push/e-posta teslimi bu testlerin kapsamı dışındadır.
|
||
|
||
### Bildirim menüsü tarayıcı kabulü — 6 Eylül 2026
|
||
- 5180 yerel QA ortamında iki sentetik bildirim gerçek takip.sqlite deposuna yazıldı; normal test hesabıyla Header menüsü kullanıldı.
|
||
- GET 503 → görünür hata → yeniden yükle → iki okunmamış kayıt; POST 503 → hata ve okunmamış durumların korunması; hatayı kaldır → açık okundu işlemi → sayfayı yeniden yükle → iki kalıcı okunmuş kayıt ve yinelenmeme doğrulandı.
|
||
- Kanıt: `qa-notification-acknowledgement.json`, 6 kontrol doğru. Test altyapısına yalnız localhost hata kontrol sayfası ve sentetik kayıt eklendi; üretim kodu bu adımda değişmedi, önceki 173 test/build sonucu yeniden çalıştırılmadı.
|
||
- Bu kabul gerçek bildirim API/deposunu kullanır; dış e-posta, Telegram veya işletim sistemi push teslimi testi değildir. Planın diğer kabul maddeleri açık.
|
||
|
||
### Bildirim abonelikleri hata ve hesap izolasyonu — 6 Eylül 2026
|
||
- Listeleme hatası boş abonelik listesine dönüştürülüyordu; DELETE yanıtında success kontrol edilmeden liste boşaltılıyordu. Ekran ortak süre sınırlı hesap isteğine geçirildi, yanıt liste şeması doğrulanıyor. Hatalar mevcut listeyi/formu koruyarak görünür; yeniden yükleme düğmesi var.
|
||
- Form hesap+oturum anahtarıyla ayrıldı, kapanan formun geç yanıtları atılır. Kayıt/silme/yenilemede eşzamanlı işlem kilidi var. Site taraması da süre ve hesap kontrollerine bağlandı; geçersiz sonuç render edilmez. Silme düğmesine abonelik özetiyle erişilebilir ad verildi.
|
||
- Sunucu filtre tipleri/listeleri ve DELETE kimliği doğrulanıyor; desteklenmeyen metot 405. notify.sqlite yapılandırılmış kullanıcı volume'una bağlı ve 0600 izinli; eski özel dizinli kurulum için taşıma gereksinimi runbook'ta.
|
||
- 174 test ve üretim derlemesi geçti. Yeni depo testi geçersiz kriterin kayıt oluşturmamasını, hesap izolasyonunu ve sahip silmesini doğruluyor. Bu yeni formun tarayıcı hata/kayıt/sil kabulü ve gerçek e-posta teslimi henüz yapılmadı.
|
||
- Mevcut abonelik kimliği (aynı şehir/sektör/alım türü/anahtar) yeniden kayıtta konu listesini güncelliyor; farklı konu kümelerini bağımsız abonelikler olarak tutma davranışı ayrıca ele alınmalı. D09 tamamlanmış sayılmaz.
|
||
|
||
### Abonelik konu/kurum kimliği — 6 Eylül 2026
|
||
- Aynı şehir/sektör/alım türü/anahtarda farklı konu listesi önceki aboneliği değiştiriyordu. Yeni criteria_key konu ve kurum kümelerini de kapsar; farklı kümeler bağımsız saklanır. Aynı seçimin sıra/büyük-küçük harf/kenar boşluğu farkı yeni abonelik oluşturmaz, gönderim geçmişi korunur.
|
||
- Legacy tablo tek transaction ile taşınır. Kimlikler, gönderim/görülen ihale alanları, aktiflik ve AUTOINCREMENT üst sınırı korunur. Normalleştirmeyle eşdeğer olan eski kayıtlar kayıpsız bırakılır; bozuk eski JSON'da geçiş rollback olur.
|
||
- 177 otomatik test geçti: farklı kümeler, eşdeğer kayıt tekrarları, gönderim geçmişi, legacy tekrarlar/id sırası, index yeniden kurulması ve hatada rollback/integrity doğrulandı. Sunucu kodu değişti; arayüz değişmediği için önceki derleme tekrarlanmadı.
|
||
- Eski koda geri dönüşün veritabanı yedeğiyle eşleştirilmesi runbook'a eklendi. Üretim migration uygulanmadı. Yeni abonelik formunun tarayıcı kayıt/sil/hata kabulü açık.
|
||
|
||
### Abonelik formu tarayıcı kabulü — 6 Eylül 2026
|
||
- Yerel 5181 ortamında gerçek API/notify.sqlite ile liste GET503→yeniden yükle, Laboratuvar sarfı ve Test cihazı için aynı daraltmayla iki ayrı kayıt, DELETE503→iki kaydın korunması, başarılı silme→yalnız hedefin kaldırılması ve sayfa yenilemede kalıcılık doğrulandı.
|
||
- `qa-subscription-lifecycle.json`: 6 kontrol doğru. Hata yanıtları yalnız QA middleware'de üretilir; gerçek kayıt/sil/liste endpointleri kullanıldı. E-posta teslimi yapılmadı.
|
||
- Ekrandaki koşulsuz gönderim ve yinelenmeme vaadi değiştirildi: e-posta hizmetinin etkin olması gerektiği ve abonelik kaydının teslim kanıtı olmadığı açıklandı. Derleme geçti; salt UI metni/test altyapısı değiştiği için önceki 177 test yeniden çalıştırılmadı.
|
||
- Dış e-posta/Telegram teslimi, provider hata sonrası yeniden deneme ve planın diğer kabul maddeleri açık.
|
||
|
||
### E-posta bildirim sınırı ve görülme geçmişi — 6 Eylül 2026
|
||
- Bulgu: e-posta ilk NOTIFY_MAX (varsayılan 25) ihaleyi içerirken bütün eşleşmeler gönderilmiş sayılıyordu; 26. ve sonraki kayıtlar kayboluyordu. Artık yalnız e-postaya alınan grup gönderilmiş işaretlenir; kalanlar sonraki turda alınır.
|
||
- Görülme geçmişinin 400 kayıtla kesilmesi kaldırıldı. Başarılı grup mevcut geçmişle transaction içinde birleştirilir; eski ilanlar sırf kesildiği için yeniden yeni sayılmaz.
|
||
- İlk tarama markBaseline ile son gönderim zamanını değiştirmeden başlangıç listesini kaydeder. initialized alanı mevcut sonGorulenler kaydından türetilir, yeni şema geçişi yoktur.
|
||
- Süresi geçmiş, iptal/sonuç/arşiv ve tarih-saati doğrulanamayan ilanlar yeni ihale e-postasına alınmaz. Aynı süreçte üst üste başlayan turlar için çalışma kilidi eklendi.
|
||
- 181 otomatik test geçti. Kontrollü sağlayıcı hatası→hiçbir işaretleme, 28 kayıt→25+3 dağılımı, başlangıçta gönderim olmaması, 450+ kayıt geçmişi ve eşzamanlı tur koruması test edildi. Gerçek e-posta gönderilmedi.
|
||
- Sağlayıcının e-postayı kabul edip yerel kayıt öncesi süreç kapanması halinde tekrar gönderim ihtimali sürer; çok süreçli gönderim kilidi ve Telegram için ayrı teslim kuyruğu henüz yok. Bu çalışma dış teslim/eksiksiz outbox kabulü değildir.
|
||
|
||
### E-posta gövdesi ve taşıma doğrulaması — 6 Eylül 2026
|
||
- Ek bulgu: notifier 25 kaydı seçse bile tenderDigestHtml kendi içinde 15 kayda kesiyordu. Şablonun gizli sınırı kaldırıldı; seçilen tüm kayıtlar gövdeye giriyor. 25+3 dağılım testi artık gerçek HTML şablonunda 24./27. indeksli son kayıtları da kontrol ediyor.
|
||
- sendEmail 30 saniyelik fetch sınırı, sabitlenebilir from alanı ve isteğe bağlı Idempotency-Key desteği aldı. HTTP başarılı olsa bile sağlayıcı gönderim id'si yoksa belirsiz sonuç hatası oluşur.
|
||
- Resend belgelerine göre idempotency anahtarları 24 saat tutulur: https://resend.com/docs/dashboard/emails/idempotency-keys . Bu nedenle kalıcı kuyruğun süresi dolan belirsiz işi sessizce yeniden göndermemesi gerekir.
|
||
- 183 otomatik test geçti. Gövdenin 25 kaydı kapsaması, HTML kaçırma, gönderici/anahtar aktarımı ve eksik gönderim kimliği hatası kontrollü testlerle doğrulandı. Gerçek e-posta gönderilmedi.
|
||
- Anahtar desteği henüz notifier'ın kalıcı gönderim kaydına bağlanmadı; kalıcı outbox işi açık. Bu değişiklik tekrar gönderimin bütünüyle önlendiği anlamına gelmez.
|
||
|
||
### Kalıcı abonelik e-postası kuyruğu — 6 Eylül 2026
|
||
- notification_outbox notify.sqlite'a eklendi. İçerik, gönderen, alıcı, ihale grubu ve UUID kalıcıdır; retry güncel şablonu/ilanı kullanarak metni değiştirmez. Resend Idempotency-Key aynı UUID'den üretilir.
|
||
- Abonelik başına tek aktif grup unique index ve transaction ile korunur. 120sn işçi sahipliğiyle ikinci işçi aynı grubu üstlenemez; geç eski işçinin başarı/hata kaydı reddedilir. Sağlayıcı kabulü ve görülen ihale listesi aynı transaction'da tamamlanır. Eski abonelik listesiyle çalışan işçi daha önce işaretlenmiş grubu yeniden oluşturamaz.
|
||
- İlk çağrıdan 23 saat geçmiş belirsiz grup otomatik yeniden gönderilmez; abonelik listesinde inceleme gereksinimi gösterilir. Abonelik silinince bekleyen grup iptal edilir; hâlihazırda sağlayıcıya ulaşmış isteği geri çekme garantisi yoktur.
|
||
- 186 test ve üretim derlemesi geçti. Gerçek depo/notifier + kontrollü sağlayıcıyla hata→kaynak değişikliği→aynı gövde/anahtar retry→kabul test edildi. Kaynak sabitleme, işçi yarışması, eski işçi reddi, atomik görülme, süre aşımı ve abonelik silme test edildi.
|
||
- Gerçek Resend teslimi, gerçek SIGKILL/outbox kabulü ve belirsiz gönderimin yönetici çözüm ekranı henüz yok. Telegram ayrı kalıcı kuyrukta değil; e-posta kabulünden sonra süreç kesilirse Telegram bildirimi eksik kalabilir. Sağlayıcı hesap değişimi/geri yükleme işlemleri için runbook kısıtları eklendi. Planın tümü açık.
|
||
|
||
### Belirsiz e-posta gönderimi yönetici incelemesi — 6 Eylül 2026
|
||
- Mobil PWA içinde yalnız yöneticiye açık bekleyen gönderim/inceleme listesi eklendi. /api/admin/notify/outbox yetkilendirmesi sunucuda 401/403 ile uygulanır; UI gizleme tek kontrol değildir.
|
||
- Belirsiz iş confirmed_sent (sağlayıcı id, açık kontrol onayı, 20+ karakter açıklama) veya skip (yeniden göndermeden kapatma) ile çözülebilir. Yeni e-posta gönderilmez. İki karar da grup kimliklerini görülmüş sayarak aynı grubun yeniden oluşmasını önler; yalnız confirmed_sent son gönderim tarihi oluşturur.
|
||
- notification_outbox_reviews aktör, karar, açıklama ve zamanı tutar. Karar ve abonelik görülme güncellemesi atomiktir; yalnız uncertain durumunda tek karar kabul edilir. Abonelik sonradan silinse de karar geçmişi korunur.
|
||
- 189 test ve derleme geçti. HTTP yönetici yetkisi, geçersiz/eskimiş karar, sağlayıcı kanıtı gereksinimi, tekrar karar reddi, replay engeli ve unsubscribe sonrası inceleme geçmişi test edildi. Yeni yönetici ekranının tarayıcı kabulü henüz yapılmadı; sağlayıcı kaydının gerçek doğrulaması insan incelemesidir.
|
||
|
||
### Yönetici gönderim incelemesi tarayıcı kabulü — 6 Eylül 2026
|
||
- 5182 yerel QA deposunda sentetik belirsiz e-posta grubu oluşturuldu. Normal hesapta inceleme alanının bulunmaması, yöneticiye görünmesi, açıklama/sağlayıcı kimliği/onay koşulları ve confirmed_sent kararı gerçek UI/API ile sınandı.
|
||
- Yönetici aktörü/açıklaması kalıcı kaldı, ikinci karar düğmesi kalktı, sayfa yenilendikten sonra karar geri geldi. Kaydedilen sağlayıcı kimliği sonuçta ayrıca gösterildi.
|
||
- `qa-outbox-review.json`: 9 kontrol doğru. Sağlayıcı makbuzu sentetiktir; gerçek e-posta gönderilmedi veya doğrulanmadı. Skip dalı önceki sunucu testlerinde doğrulandı; bu tarayıcı oturumunda confirmed_sent dalı yürütüldü.
|
||
- Derleme geçti. UI referans gösterimi ve QA altyapısı değişti; önceki 189 test sonucu yeniden çalıştırılmadı. Gerçek outbox süreç kesintisi ve dış teslim kabulü açık.
|
||
|
||
### E-posta kuyruğu gerçek süreç kesintisi — 6 Eylül 2026
|
||
- Gerçek notifier, notify.sqlite ve outbox kullanılarak iki alt süreç SIGKILL testi eklendi: sağlayıcı kabulü alındıktan sonra yerel commit öncesi ve commit sonrası.
|
||
- Ayrı kurtarma sürecinde commit öncesi kayıt aynı UUID/byte-identical payload ile yeniden çağrıldı; sonradan değişen kaynak B e-postayı değiştirmedi. Commit sonrası kayıtta sağlayıcı yeniden çağrılmadı. Görülmüş ihale listesi, provider id ve SQLite integrity_check doğrulandı.
|
||
- Yerel deterministik sağlayıcı simülatöründe iki senaryoda da tek teslim; commit öncesi iki istek, sonrası tek istek gözlendi. Bu gerçek Resend tesliminin kanıtı değildir. Lease saati testte 121 saniye ilerletilir; gerçek zaman bekleme yapılmaz.
|
||
- 191 otomatik test geçti. Üretim kodu değişmediği için önceki derleme tekrarlanmadı. Dış teslim, platform volume kurtarma ve Telegram kalıcı kuyruk kabulü açık.
|
||
|
||
### D03 — Eksik bilgiden düzeltilecek alana geçiş — 6 Eylül 2026
|
||
- Teklif dosyasına çıktı öncesi eksik listesi eklendi. Firma, kaynak, teklif türü/geçerliliği, kısım, fiyat ve belge/uygunluk maddeleri ilgili kontrol alanına kaydırır ve klavye odağını taşır. Doldurulan eksikler listeden kalkar; eksik taslak kaydı mümkün, mevcut çıktı engelleri korunur.
|
||
- Her fiyat alanının kalem numarası/adı içeren erişilebilir adı, hata açıklaması ve aria-invalid durumu var. Kaynak kalem eksikleri ile fiyat hataları satırda ayrılır. Belge eksikleri belge/ürün kontrol bölümüne gider; her alt belge alanına ayrı odaklama bu değişikliğin kapsamı değildir.
|
||
- Kaşe üretmeyen dosya hazırlama panelinin eski PDF & Kaşe adı Teklif Dosyası Hazırla olarak düzeltildi; dosya bağlantısı PDF / Excel çıktılarını belirtir.
|
||
- Yerel 5182 sentetik Giresun fixture tarayıcısında 7 kontrol geçti: firma odağı, tamamlanan alanın listeden kalkması, fiyat odağı/erişilebilir hata bağlantısı, fiyat düzeltmesinin hatayı kaldırması, 125,50 × 2 = 251,00 TL, belge bölümüne odak ve eksik dosyada çıktı engeli. Kanıt: qa-preparation-navigation.json.
|
||
- Derleme geçti. Hesaplama veya sunucu kodu değişmediğinden 191 testlik önceki otomatik paket tekrar çalıştırılmadı. Gerçek çok sayfalı PDF, resmi beş dosya ve planın diğer açık kabulleri tamamlanmış sayılmaz.
|
||
|
||
### D03 — Ortak teklif toplamı ve tutar sınırı — 6 Eylül 2026
|
||
- İncelemede HTML cetvelinin kendisine verilen toplamı satırlarla karşılaştırmadan bastığı, Excel'in ayrı toplam aldığı ve satırlar tek tek geçerliyken toplamın güvenli sayı sınırını aşabildiği görüldü.
|
||
- Ekran, HTML cetveli ve Excel ortak bidTotal hesabını kullanır: yuvarlanmış satır tutarları kuruş olarak toplanır; güvenli tam sayı sınırı denetlenir. HTML cetveli dışarıdan verilen toplam ortak hesapla eşleşmiyorsa üretimi reddeder.
|
||
- Götürü bedel ve teklif mektubunda ortak bidAmount geçersiz, sıfıra yuvarlanan ve hesaplama sınırını aşan tutarı reddeder. Eksik fiyat artık genel toplamda sıfır gibi gösterilmez; Hesaplanamadı açıklaması görünür.
|
||
- 193 otomatik test ve derleme geçti. Son test genişletmesinden sonra ilgili 10 test yeniden geçti. Yüz adet 3 × 0,335 satırının her biri 1,01; ortak toplam, HTML ve gerçek XLSX dosyasından geri okunan toplam 101,00 olarak doğrulandı. Toplam taşması ve tutarsız toplam üretimi reddedildi.
|
||
- Bu kanıt HTML/XLSX hesaplamasını kapsar; tarayıcı PDF indirme, çok sayfalı görsel yerleşim, resmi ihale belgelerinin doğruluğu veya firma bilgilerinin gerçekliğini kanıtlamaz. Firma alanlarında bu tur yeni doğrulama uygulanmadı.
|
||
|
||
### Bildirim kaynağı hatasını boş sonuçtan ayırma — 6 Eylül 2026
|
||
- Bildirim turu daha önce eksik tenders alanını boş liste kabul ederek yeni aboneliğin başlangıç geçmişini oluşturabiliyordu. Şimdi kaynak şekli tüm abonelik döngüsünden önce doğrulanır: başarısız yanıt, eksik/dizi olmayan liste, kimliksiz/başlıksız kayıt, tekrar eden kayıt kimliği veya bozuk items yapısı turu hata ile durdurur; baseline/outbox işlemi başlamaz.
|
||
- Geçerli tenders:[] yanıtı gerçekten boş liste olarak işlenmeye devam eder. Hatalı tur sonrası processing kilidinin bırakılması ve sonraki geçerli turun çalışması test edildi.
|
||
- E-posta kriter açıklaması ortak escapeHtml ile kaçırılır; kullanıcı kriterindeki HTML bağlantısı/etiketi e-posta gövdesine işaretleme olarak giremez. Konu satırı düz metnini korur.
|
||
- 195 otomatik test geçti. Yalnız sunucu ve test kodu değiştiğinden frontend derlemesi tekrarlanmadı. Testler dış e-posta göndermez.
|
||
- Bu kontrol beslemenin yapısını doğrular; şekli geçerli fakat eksik/eski kaynakların tamlık ve güncelliğini kanıtlamaz. Bekleyen gönderimin ihalesi sonradan iptal olduğunda yeniden değerlendirme, gerçek sağlayıcı teslimi ve diğer plan kabulleri açık.
|
||
|
||
### Bekleyen e-postada ihale güncellik kontrolü — 6 Eylül 2026
|
||
- Kuyruktan alınan sabit e-posta, sağlayıcı çağrısı öncesinde o turun doğrulanmış kaynak listesiyle karşılaştırılır. İlan kayıp, iptal/sonuçlanmış, süresi geçmiş, zamanı belirsiz veya son teklif zamanı değişmişse eski içerik yeniden gönderilmez. Sabit digest eksik/kimlikleri uyumsuzsa da durur.
|
||
- holdDelivery mevcut lease sahibinin sending kaydını uncertain inceleme durumuna alır; payload/UUID/görülmüş kayıtlar değişmez. Eski worker hold/başarı/hata ile kaydı değiştiremez. Sonraki reserve turu inceleme gerekçesini artık genel bir hatayla ezmez.
|
||
- İnceleme mevcut yönetici outbox akışını kullanır: sağlayıcı kaydıyla gönderildiğini doğrulama veya yeniden göndermeden kapatma. Tarihi değişen grubun içeriği aynı idempotency key altında yeniden yazılmaz.
|
||
- 197 otomatik test geçti. Eksik ilan, iptal, süre aşımı, eksik saat, ileri alınmış tarih; provider/ack çağrısının yapılmaması; hold lease sınırı; sonraki turda gerekçenin korunması doğrulandı. Önceki gerçek süreç kesintisi ve aynı anahtarla tekrar testleri de geçti. Dış sağlayıcıya gönderim yapılmadı.
|
||
- Kontrol o turda alınan kaynak görünümüne dayanır; canlı kaynağın sonradan değişmesini veya geçerli şekle sahip eski beslemeyi tespit garantisi vermez. Başlık değişikliği tek başına tekrar anahtarını bozmaz. UI değişmediğinden frontend derlemesi tekrarlanmadı.
|
||
|
||
### Kanban durum seçimi ve sahte gönderim mesajı — 6 Eylül 2026
|
||
- Panoda hiçbir entegrasyon çağrısı yapmadan Slack/Teams'e başarıyla gönderildi alert'i üreten düğme kaldırıldı. Bu panoda gönderimin desteklenmediği açıkça belirtilir; dış mesaj gönderilmedi.
|
||
- Her karta iş akışı durumu select'i eklendi. Sürükleme dışında yerel seçim kontrolüyle durum güncellenir; sorumlu filtresi/ataması ve detay düğmesi erişilebilir adlarla tanımlanır. Tıklanabilir başlık gerçek button oldu.
|
||
- Kayıt sırasında durum/atama/sürükleme kilitlenir; mevcut sunucu kayıt hatası panoda gösterilir. Durum iyimser olarak değiştirilmez, mevcut mutateTender kalıcılık akışı korunur.
|
||
- Yerel 5182 sentetik Giresun görevinde 5 kontrol geçti: sahte düğmenin kalkması, desteklenmeme açıklaması, durum seçimi, yenileme sonrası durumun korunması ve erişilebilir kontrol adları. Kanıt qa-kanban-controls.json. Derleme geçti. Önceki 197 test tekrar çalıştırılmadı; sunucu değişmedi.
|
||
- Bu tur atama mutasyonu, hata enjeksiyonu, yalnız klavyeyle tam gezinme veya beş dosyalı eksik/sorumlu/sonraki işlem özetinin kabulünü kanıtlamaz. D07'nin ortak hazırlık özeti açık.
|
||
|
||
### D07 — Beş dosyalı hazırlık özeti — 6 Eylül 2026
|
||
- Kanban'a Hazırlık dosyaları özeti eklendi. Aynı takip/sorumlu filtresindeki tüm ihaleler için sorumlu, kayıtlı taslaktaki kontrol sayısı, belge eksikleri ve sıradaki kontrol bir tabloda gösterilir. Kaydedilmemiş form değişiklikleri özetin dışında olduğu açıklanır; temiz özet başvuru onayı olarak sunulmaz.
|
||
- preparationSummary mevcut kaynak/kalem/kısım, firma alanları, teklif türü/geçerliliği, fiyat, sağlık koşulları ve belge bağlantı/sürüm/süre kontrollerini kullanır. Zorunlu firma alanları ortak modüle taşındı. Belge deposu hata/yükleme durumları gösterilir; yenileme düğmesi vardır.
|
||
- Özet bağlantıları detayın doğrudan hazırlık sekmesini açar ve ilgili firma/fiyat/kontrol alanına odak taşır. Belge ve ürün eksikleri ilgili kontrol bölümüne gider. Çıktı öncesi canlı belge doğrulamaları korunur.
|
||
- 200 otomatik test ve derleme geçti. Beş ayrı sorumlu/belge içeren taslak özeti, eski belge sürümü/depo hatası ve geçmiş deadline önceliği test edildi.
|
||
- 5182 yerel tarayıcıda beş sentetik görev tek tabloda görüldü; vergi alanına doğrudan odak, kaydedilen düzeltmenin özetten kalkması, sorumlu atamasının yansıması ve yenileme sonrası kalıcılık dahil 6 kontrol geçti (qa-preparation-overview.json).
|
||
- Bu sentetik kabul gerçek beş resmi dosyanın uygunluğunu kanıtlamaz. Firma portföyü/ürün kapasitesi, tam mobil erişilebilirlik, her eksik belgeye ayrı alt-alan odağı ve resmi çıktılarla ilgili açık maddeler devam eder. Özet kontrolleri kayıtlı taslağa dayanır; yeni AI analizi veya kaydedilmemiş değişiklikler dosya ekranında ayrıca değerlendirilir.
|
||
|
||
### D07 — Keşfet / Hazırlan / Pazar / Yönetim — 6 Eylül 2026
|
||
- Tek uzun araç şeridi dört çalışma alanına ayrıldı. Keşfet: liste/bülten/takvim/TED; Hazırlan: Kanban/doküman/KDV/sınır değer/KİK; Pazar: sonuç/sözleşme/fiyat/radar/analitik/kırmızı bayrak; Yönetim: planlar/API/PWA ve yalnız yönetici AI ayarları.
|
||
- Grup değişimi ilk aracı açar; etkin ekran ve bekleyen geçiş ilgili grubu belirler. Yan panel gibi başka yerlerden açılan ekranlarda grup otomatik uyum sağlar. Mevcut alt şerit taşma okları ve etkin aracı görünür tutma korunur. Grup düğmeleri aria-pressed, etkin araç aria-current taşır.
|
||
- Kullanım kılavuzuna grup açıklaması eklendi. Kanban yardımı yeni durum seçimi, kaydetme, hazırlık özeti ve desteklenmeyen Slack/Teams gönderimine göre güncellendi.
|
||
- Yerel normal hesapta dört grup, hazırlık panosunun açılması, normal kullanıcıda AI ayarının gizli olması ve yan panel kısayoluyla grubun değişmesi dahil 6 kontrol geçti (qa-navigation-groups.json). Derleme geçti. Önceki 200 otomatik test tekrar çalıştırılmadı; sunucu/hizmet hesabı değişmedi.
|
||
- Yeni menünün tam mobil/yalnız-klavye kabulü ve yardım metinlerinin kalan ekranlardaki iddiaları ayrıca incelenmeli. Bu değişiklik gizlenen yönetici araçlarının sunucu yetkilendirmesi yerine geçmez.
|
||
|
||
### D07 — Firma taramasını düzenlenebilir öneriye dönüştürme — 6 Eylül 2026
|
||
- İncelemede gerçek tarama hatasının alan adından ürün tahminiyle gizlendiği, zamanlayıcının sahte yüzde/başarı ürettiği ve profilin inceleme öncesinde değiştirildiği görüldü. Bu fallback ve otomatik uygulama kaldırıldı.
|
||
- Site taraması ortak zaman aşımı/oturum kontrollü istekle yalnız öneri döndürür; bozuk listeler hata olur. Düzenleme ekranında sektör, ürün/hizmet, sertifika beyanı ve ihale konuları elle eklenebilir/kaldırılabilir. Tarama olmadan boş profilden başlanabilir.
|
||
- Profil ve uyum eşiği yalnız Profili kaydet ile sunucu yanıtı beklendikten sonra uygulama durumuna aktarılır. Eski arka plan profil autosave kaldırıldı. Tarama/yerel düzenleme/kapama kendiliğinden profil yazmaz. Hata mevcut ürünleri korur; modal kapanınca tarama istemcisi iptal edilir, hesap değişiminde yerel taslak ayrılır.
|
||
- Sahte ilerleme yüzdeleri, konfeti, doğrulanmış sektör/ÜTS iddiaları kaldırıldı. Modal başlığı/alanlar/kapama etiketlendi; odak geri dönüşü, Escape ve Tab sınırı eklendi.
|
||
- 202 otomatik test ve derleme geçti. Yerel normal hesapta taramasız ekleme, kaydetmeden kapatma, kayıt onayı, yenileme sonrası kalıcılık, yapılandırılmamış tarama hatası ve mevcut ürünü koruma dahil 6 tarayıcı kontrolü geçti (qa-company-profile.json). Başarılı tarama öneri dönüşümü stub testte doğrulandı; gerçek AI/site taraması yapılmadı.
|
||
- Marka/model, yapılandırılmış ÜTS durumu ve servis kapasitesi portföyü henüz eklenmedi. Çok cihazlı eşzamanlı profil düzenleme ve başarılı gerçek tarama kabulü açık. Profil kaydı için mevcut hesap veri deposu kullanılır; bu tur yeni sunucu şeması yoktur.
|
||
|
||
### D07 — Yapılandırılmış sağlık portföyü ve kalem seçimi — 6 Eylül 2026
|
||
- Firma profilinde kalıcı healthPortfolio kayıtları eklendi: ürün grubu, marka, model/hizmet adı, ÜTS beyanı ve açıklaması, kurulum/bakım/servis kapasitesi. Sarf/test, cihaz/servis ve personelli hizmet kapsamları ayrı seçilir. Tüm alanlar firma beyanı olarak sunulur.
|
||
- Web taraması önerileri alınırken elle oluşturulmuş sağlık portföyü korunur. Portföy mevcut açık profil kaydetme akışıyla hesap deposuna yazılır.
|
||
- Hazırlık kaleminde portföyden ürün seçilebilir; seçimin kimliği ve o andaki beyan kopyası bidDraft içinde saklanır. Ürün seçimi veya marka/model değişimi önceki teknik kaynak/uygunluk/ÜTS/numune/servis/teslim kontrollerini sıfırlar; uygunluk otomatik verilmez. Yeniden kontrol gerekliliği alanda açıklanır.
|
||
- 203 otomatik test ve derleme geçti. Seçilen beyan kopyasının kaynak nesne değişince korunması ve bütün teknik onayların pending kalması test edildi. Yerel cihaz portföyü kaydı/yenileme, kaleme seçim, eski uygunluğu sıfırlama, çıktı engeli ve taslakta seçimin korunması dahil 6 tarayıcı kontrolü geçti (qa-health-portfolio.json).
|
||
- Sentetik ÜTS beyanı resmi kayıt doğrulaması değildir. Portföy sonradan değişince mevcut teklifin seçilmiş kopyası otomatik güncellenmez; kullanıcı yeniden seçebilir. Bu tur tek cihaz/tek kalem sınandı; gerçek firma portföyü, beş resmi dosya ve dış çıktı kabulleri açık.
|
||
|
||
### D07/D08 — Portföyün açıklanabilir eşleşmeye katılması — 6 Eylül 2026
|
||
- Yalnız yapılandırılmış sağlık portföyü giren hesabın ürünleri profilTerimleri tarafından okunmuyordu. Portföy ürün grubu ve marka/model metni sözlüksel eşleşmeye eklendi; nedenler kaynağı açıkça gösterir. Aynı ürün elle girilen listede de varsa iki kere sayılmaz.
|
||
- Gömme için oluşturulan profil metni portföyü Firma portföyü (beyan) etiketiyle içerir. ÜTS beyanı/kayıt numarası ve servis personel kapasitesi puan terimine dönüştürülmez; ürün beyanı resmi uygunluk kanıtı değildir.
|
||
- İlan metnindeki ilk 3000 karakter sınırı kaldırıldı. Daha sonraki ürün ifadeleri de ilan metni nedeniyle eşleşebilir.
|
||
- 206 otomatik test ve derleme geçti. Portföy-only profil, açıklama kaynağı, ilgisiz akaryakıt örneğinin sıfır kalması, ÜTS/kapasitenin puan terimi olmaması, uzun metinde geç eşleşme, çift puan engeli ve portföy kaldırılınca eski puanın temizlenmesi doğrulandı.
|
||
- Bu testler eşleşme bağlantısını kanıtlar; yüksek skor teknik yeterlilik veya gerçek teklif uygunluğu değildir. Büyük havuz performansı ve gerçek portföy/ilan örneklerinde eşleşme kalitesi ayrıca kabul edilmelidir.
|
||
|
||
### Kayıtlı filtrelerde gerçek kayıt sonucu — 6 Eylül 2026
|
||
- Filtre oluşturma/silme daha önce yerel listeyi hemen değiştirip arka plandaki yazmayı beklemiyordu. saved_filters autosave kaldırıldı; ortak kayıt işlemi sunucu yanıtından sonra listeyi günceller. Kilit, hesap/oturum kontrolü, kayıt durumu ve hata gösterimi eklendi. Başarısız kayıtta isim temizlenmez; silme başarısızsa mevcut liste korunur.
|
||
- Bildirim aboneliği oluşturmayan işlemdeki anında haber/bot çalıştırma iddiaları kaldırıldı. E-posta aboneliğinin ayrı kurulduğu açıklanır. Boş isim için alert yerine native required kullanılır; form alanları ve silme düğmeleri etiketlendi.
|
||
- 206 test ve derleme geçti. Yerel tarayıcıda kaydetme onayı, yenilemede kayıt, silme ve yenilemede silinmiş kalma olmak üzere 4 kontrol geçti (qa-saved-filter-lifecycle.json). Bu tur kayıt hatası enjeksiyonu yapılmadı; çok cihazlı eşzamanlı düzenleme kabulü açık.
|
||
- Ayrı eksik: kayıtlı filtre kartını arama ölçütlerine uygulama akışı mevcut değildi ve bu tur eklenmedi; bölge/şehir/sektör/usul ölçütleriyle uygulama sonraki iş olarak açık. Filtre yönetimi henüz tam uçtan uca kabul edilmiş sayılmaz.
|
||
|
||
### Kayıtlı filtreyi aramaya uygulama — 6 Eylül 2026
|
||
- Kayıtlı filtre adları hem sol panelde hem filtre yönetiminde uygulanabilir düğme oldu. Uygulama şehir, bölge, sektör, kurum tipi ve usulü yükler; eski arama/CPV/hızlı filtreyi temizleyip ilan listesine geçer. Tanınmayan bölge geçersiz filtre hatası olarak gösterilir.
|
||
- İl bazlı yedi bölge eşlemesi eklendi; 81 ilin her biri tam bir kez kapsanır. Aktif bölge listede açıkça görünür; tek başına veya tüm filtrelerle kaldırılabilir. Bölge şehir ölçütüyle birlikte uygulanır ve bilinmeyen şehir seçili bölgeye dahil edilmez.
|
||
- Usul alanı explicit usul/ihaleUsulu/alimTuru değerlerinden eşleşir; Mal Alımı değerinden Açık İhale tahmini yapılmaz. Kaynakta usul yoksa usule göre filtrelenmiş sonuçta gösterilmez.
|
||
- 209 otomatik test ve derleme geçti. 81 il kapsamı, Türkçe normalizasyon, beş ölçütün taşınması, geçersiz bölge ve usul/kategori ayrımı test edildi. Yerel 5 sentetik ihalede bölge filtresi 1 Giresun kaydına daralttı; bölgeyi kaldırınca 5 kayıt geri geldi; yenileme sonrası sol panelden tekrar uygulandı. 4 kontrol qa-saved-filter-application.json içinde.
|
||
- İl bazında bölgeleme coğrafi sınırın ilçelerdeki ayrıntısını temsil etmez. Gerçek kaynak usul/şehir doğruluğu ve bütün ölçütlerin birleşik tarayıcı senaryosu ayrıca kabul edilmelidir. Bu işlem bildirim aboneliği oluşturmaz.
|
||
|
||
### Telegram durum ekranında hata ve rol görünümü — 6 Eylül 2026
|
||
- İlk GET hatasında d=null olduğu için bölüm tamamen kayboluyordu. Yükleme/hata/yeniden deneme ekranı eklendi; bağlantı durumunun boolean alanları doğrulanır. Sonradan durum yenileme düğmesi de vardır.
|
||
- Hesap/token anahtarıyla panel ayrılır; kapalı/eski panelin yanıtı UI'ye uygulanmaz. Tek işlem kilidi, duruma göre başarı/hata mesajları ve erişilebilir status/alert rolleri eklendi. Yenileme başarısızlığı yutulup başarı gibi sunulmaz.
|
||
- Bot kurulum talimatları yalnız yöneticide gösterilir. Normal kullanıcı hizmetin etkin olmadığını ve yöneticiyle görüşmesi gerektiğini görür. Bağlama başarısı mesajının dış onay mesajını gönderildi varsayması kaldırıldı.
|
||
- 5183 yeni izole QA örneğinde ilk GET 503, ardından gerçek API yanıtıyla kurtarma sınandı. 5 kontrol geçti: hata, retry, kurtarma, normal kullanıcıda kurulum ayrıntılarının gizli olması ve hatanın temizlenmesi. Kanıt qa-telegram-status.json. Dış mesaj veya bağlama isteği gönderilmedi.
|
||
- Derleme geçti. Sunucu iş mantığı değişmediği için önceki 209 otomatik test tekrar çalıştırılmadı. Bot eşleme kodunun yaşam döngüsü ve gerçek teslim kabulü açık.
|
||
|
||
### Yeni menüde üç genişlikte görünüm ölçümü — 6 Eylül 2026
|
||
- Yerel QA'ya gerçek uygulamayı aynı origin iframe içinde 390/768/1440 piksel genişlik ve 900 piksel yükseklikte açan görünüm sayfası eklendi. Görünür ölçüm alanı document client/scroll genişliğini ve grup düğmelerinin sınırlarını gösterir; uygulama durumu değiştirilmez.
|
||
- Scrollbar sonrası içerik genişlikleri 384/762/1434 piksel olarak ölçüldü. Her üçünde document scrollWidth=clientWidth; dört çalışma alanı düğmesi görünümün yatay sınırları içinde. Dar görünümde Yönetim ikinci satıra geçiyor. Kanıt qa-responsive-navigation.json.
|
||
- Yalnız ana liste ve menü geometrisi doğrulandı. Kök locator iç iframe düğmesine erişemediğinden dar ekran etkileşim kabulü iddia edilmez. Portföy formu, hazırlık özeti, odak sırası ve dokunmatik kullanım açık.
|
||
- Üretim kodu değişmedi; otomatik test/derleme tekrarlanmadı. Eklenen QA sunucusu bu ölçümden sonra kapatıldı ve geçici deposu temizlendi.
|
||
|
||
### Google giriş ve oturum geri yükleme — 6 Eylül 2026
|
||
- Yapılandırma ağ/hizmet hatası artık Google girişi kurulmamış gibi sunulmaz. Giriş ekranında hata, tekrar deneme ve doğrulanıyor durumu vardır. Google betiği için 15 saniye, yapılandırma/giriş/oturum HTTP isteği ve yanıt gövdesi için 30 saniye sınırı eklendi. SDK başlatma hataları yakalanır.
|
||
- Eski/kapatılmış giriş denemesinin yanıtı oturum oluşturamaz. Yinelenen Google callback aynı anda ikinci giriş başlatmaz. Geçersiz token/kullanıcı yanıtı reddedilir; depolama yarıda başarısız olduğunda yarım oturum temizlenir.
|
||
- Oturum geri yükleme sırasında 5xx, bozuk yanıt ve zaman aşımı saklı oturumu silmez. Açık 401/403 yetki reddi oturumu temizler. Yanıt beklerken yeni hesaba geçilmişse eski yanıt yeni hesabı değiştiremez. Sunucu tarafındaki yetkilendirme geçerliliğini korur.
|
||
- 215 otomatik test geçti; yeni testler yapılandırma ayrımı, iptal, geçersiz giriş, yarım depolama, 401/403, 5xx/bozuk yanıt, hesap değişimi ve takılmış yanıt gövdesinin zaman aşımını kapsar. Üretim derlemesi geçti; büyük paket uyarısı sürüyor.
|
||
- Gerçek Google OAuth hesabıyla giriş, SDK yükleme hatasının tarayıcı kabulü ve tüm mobil giriş etkileşimleri henüz doğrulanmadı. Uygulama Google hesabı kullanıyor; bağımsız parola sıfırlama akışı bulunmuyor. Canlıya yayın yapılmadı.
|
||
|
||
### Portföy değiştiğinde eski ürün onaylarının engellenmesi — 6 Eylül 2026
|
||
- Seçim anındaki portföy kopyası güncel kaydın kimliği, ürün grubu, marka, model, kapsam, ÜTS beyanı/açıklaması ve servis kapasitesiyle karşılaştırılır. Kayıt silinmişse, aynı kimlik birden fazla kayıtla eşleşiyorsa veya beyan değişmişse eski uygunluk işaretleri çıktıya izin vermez. Elle girilen kapsamın mevcut kontrol akışı korunur.
|
||
- Ürün kontrolünde değişiklik uyarısı ve güncel ürünü alıp kontrolleri sıfırlama düğmesi eklendi. Önceki kayıt otomatik değiştirilmez; kullanıcı güncel seçimi aldığında teknik kaynak, uygunluk ve dört sağlık kontrolü yeniden doldurulur. Hazırlık özeti aynı engeli gösterir.
|
||
- Bağlı portföy kullanan çıktı işlemi sunucudaki firma profilini yeniden okur. Excel oluşturmanın ardından portföy tekrar okunur; yerel profil değişimi de bekleyen çıktı işlemini geçersiz kılar. Profil isteği başarısızsa çıktı tamamlanmaz.
|
||
- 217 otomatik test ve üretim derlemesi geçti. Testler yedi beyan alanındaki değişiklikleri, silinmiş/belirsiz kimliği, eksik profil/kopyayı, ilgisiz metadata değişimini ve tamamen onaylı bir ürünün eski portföyle engellenmesini kapsar. Yeniden seçimden sonra beş uygunluk kontrolünün tekrar gerektiği doğrulandı.
|
||
- Yeni düğmenin tarayıcı etkileşimi ve iki gerçek oturumda profil değiştirirken çıktı denemesi henüz kabul edilmedi. Profil sunucudan okunduğu andaki durumu temsil eder; sunucu kilidi veya resmi ürün kayıt doğrulaması değildir. Canlıya yayın yapılmadı.
|
||
|
||
### Portföy güncelleme düğmesinin tarayıcı kabulü — 6 Eylül 2026
|
||
- Mevcut izole 5182 QA sunucusu tarayıcıdan açılarak canlı olduğu doğrulandı; yeniden başlatılmadı. Sentetik firma modelinin M1 değeri UI üzerinden M2 yapılıp kaydedildi. Giresun test taslağı eski M1 seçimini korurken değişiklik uyarısı verdi.
|
||
- Eski modele Uygun durumu ve teknik kaynak açıklaması girilmesi portföy değişikliği engelini kaldırmadı. Güncel ürün bilgilerini al ve kontrolleri sıfırla düğmesi M2'yi aldı; önceki teknik açıklamayı temizledi ve uygunluk durumunu Kontrol gerekli yaptı.
|
||
- Taslak UI üzerinden kaydedilip sayfa yenilendi; M2 seçimi ve beş kontrolün bekleyen durumu sunucudan geri geldi. Yedi kontrolün tamamı geçti. Kanıt: /Users/hikmettanriverdi/Documents/ChatGPT/ihale/rapor/qa-portfolio-revision.json.
|
||
- Bu kabul aynı oturumda profil değişikliği, düğme ve kalıcılığı kapsar. İki gerçek oturumun yarışması, tam hazır dosyanın çıktı denemesi veya gerçek başvuru kabulü değildir. Üretim kodu değişmediğinden önceki 217 test ve derleme tekrarlanmadı. Test sekmesi kapatıldı; mevcut QA sunucusu korunuyor.
|
||
|
||
### Belge indirmede süre ve oturum kontrolü — 6 Eylül 2026
|
||
- Kimliği doğrulanmış belge indirmede fetch, hata yanıtı ve dosya gövdesi için ortak 120 saniye sınırı eklendi. İptal sinyali desteklenir; oturum yoksa ağ isteği başlamaz, hesap değişimi veya iptal sonrası dosya teslim edilmez. Zaman aşımı anlaşılır hata verir.
|
||
- İndirme bağlantısı ve geçici Blob URL, tarayıcıya teslim düğmesi hata verse de temizlenir. Türkçe dosya adı ve özgün dosya baytları korunur.
|
||
- Belge deposu her dosyanın indirme işlemini kilitler, düğmede İndiriliyor durumu gösterir; erişilemeyen dosyanın düğmesi devre dışıdır. Depodan çıkılınca bekleyen indirmeler iptal edilir. Aynı e-posta için token yenilenmesi de panel oturumunu yeniden kurar.
|
||
- 220 otomatik test ve üretim derlemesi geçti. Yeni testler takılmış başarılı/hatalı yanıt gövdesi, iptal, oturumsuz istek, özgün Türkçe içerik ve dosya adı, tıklama hatasında kaynak temizliğini kapsar. Son küçük hata-mesajı sağlamlaştırmasından sonra belge oturum testleri ayrıca geçti.
|
||
- Gerçek tarayıcı Downloads klasöründe dosya kabulü ve yavaş ağda İndiriliyor görünümü henüz doğrulanmadı. Tarayıcıya teslim, dosyanın diske yazıldığının garantisi olarak sunulmaz. Canlıya yayın yapılmadı.
|
||
|
||
### Firma profili ve kayıtlı filtrelerde eşzamanlı yazma koruması — 6 Eylül 2026
|
||
- Kullanıcı verisi GET yanıtı, aynı SELECT sonucundan veri ve içerik sürümlerini birlikte döndürür. Firma profili ve saved_filters yazımında okunan sürüm zorunludur. SQLite BEGIN IMMEDIATE içinde mevcut içerik sürümü karşılaştırılır; farklıysa 409 VERSION_CONFLICT döner ve mevcut kayıt korunur.
|
||
- Sürüm mevcut ham JSON içeriğinin SHA-256 değeridir; sayaç değildir. Aynı içerik yeniden kaydedildiğinde sürüm değişmez. Eski kayıtlar şema değişikliği olmadan sürüm alır; bulunmayan kaydın başlangıç sürümü null'dır.
|
||
- İstemci hesabın ilk yüklemesinde sürümleri saklar, profil/filtre kaydında gönderir ve yalnız başarılı yanıtta günceller. Çakışmada düzenleme otomatik tekrar gönderilmez; hata kullanıcının girdilerini kopyalayıp güncel kayıtla yeniden düzenlemesini ister. Profil formundaki kaydedilmemiş girdiler korunur.
|
||
- Her iki anahtarda sekizer aynı sürümlü eşzamanlı HTTP isteğinden yalnız biri başarılı, yedisi 409 oldu. Eski sürümle sonraki istek mevcut değeri değiştirmedi; başka hesap aynı sürümle hedef kaydı değiştiremedi. Eksik sürüm 428 aldı. Eski depo kaydı, tekrar açma ve aynı içerik davranışı test edildi.
|
||
- 222 otomatik test ve üretim derlemesi geçti. Önceki yazma-hatası testinin temizlemediği test trigger'ı finally ile temizlenerek testler arası sızıntı giderildi.
|
||
- İki tarayıcı sekmesindeki hata/kurtarma kabulü henüz yapılmadı. Ekip, favoriler ve diğer genel anahtarların eşzamanlı yazma koruması bu değişiklikte tamamlanmadı. Canlıya yayın yapılmadı; eski QA backend örnekleri yeni sürüm sözleşmesini sunmaz.
|
||
|
||
### İki sekmede firma profili çakışma kabulü — 6 Eylül 2026
|
||
- Yeni backend sürümüyle ayrı izole QA 5184 başlatıldı. Aynı hesabın iki sekmesinde başlangıç profili açıldı; her sekmeye farklı ürün eklendi. İlk sekme kaydetti, ikinci sekme açıklayıcı çakışma hatası gösterdi ve kendi girilen ürününü formda korudu.
|
||
- İkinci sekme yenilendiğinde yalnız ilk sekmenin kaydı geldi; ikinci ürün güncel profil üzerine yeniden eklendi ve iki ürün birlikte başarıyla kaydedildi. Beş kontrol geçti. Kanıt: /Users/hikmettanriverdi/Documents/ChatGPT/ihale/rapor/qa-profile-concurrent-tabs.json.
|
||
- Test sadece firma profili için gerçek iki sekme etkileşimini kapsar. Filtrelerin API çakışma kabulü önceki 222 testte mevcut; filtre UI çakışma/kurtarma senaryosu ayrıca açık. Üretim kodu değişmediğinden suite ve derleme tekrar edilmedi.
|
||
- Sekmeler kapatıldı; bu test için açılan QA süreci sonlandırıldı (exit 0), geçici depo cleanup akışı tamamlandı. Canlı site veya gerçek firma hesabı değiştirilmedi.
|
||
|
||
### Ekip kaydında sunucu onayı ve çakışma koruması — 6 Eylül 2026
|
||
- Ekip listesinin iyimser state + effect otomatik kaydı kaldırıldı. Ekleme/çıkarma mevcut ekip içerik sürümüyle sunucuya yazılır; yalnız başarıdan sonra liste ve sürüm güncellenir. Kayıt sürerken işlem kilitlenir; hata ekip formunun yanında gösterilir, ekleme girdileri temizlenmez.
|
||
- API ekip listesi, benzersiz kimlik, ad, görev ve isteğe bağlı e-posta alanlarını doğrular; mevcut plan kotası ve sürüm karşılaştırması birlikte uygulanır. Eski sekme yazımı mevcut listeyi ezmez.
|
||
- Son ekip üyesini kaldırmayı engelleyen arayüz koşulu kaldırıldı; boş ekip listesi geçerlidir. Düğme ve form alanlarına açık etiketler, kayıt sürüyor durumu ve beklerken devre dışı bırakma eklendi. Bu kayıtlar hesap içi görev/sorumlu listesidir; davet gönderilmedi veya başka kullanıcı hesabı oluşturulmadı.
|
||
- 224 otomatik test ve derleme geçti. HTTP testi ekip ekleme, eski sürüm reddi, kota aşımında mevcut kaydın korunması ve son üyeyi silmeyi doğruladı. Geçersiz/yinelenen ekip verisi test edildi.
|
||
- Ekip UI hata/kurtarma ve iki sekmeli etkileşim kabulü henüz yapılmadı. Üye silinince geçmiş ihale sorumlu adı tarihsel kayıtta kalır; otomatik yeniden atama yapılmaz. Favoriler ve diğer genel kullanıcı anahtarları için çakışma koruması açık. Canlıya yayın yapılmadı.
|
||
|
||
### Ekip ekleme, kota hatası ve son üyeyi çıkarma tarayıcı kabulü — 6 Eylül 2026
|
||
- Yeni izole 5184 QA örneğinde ilk ekip üyesi UI üzerinden kaydedildi. Ücretsiz plan kotası üzerindeki ikinci ekleme açıklayıcı hata verdi; yazılan ad formda kaldı ve listeye sahte ikinci üye eklenmedi.
|
||
- Son üye UI üzerinden çıkarılabildi; sayfa yenilenince ekip sayısı sıfır kaldı. Altı kontrol geçti. Kanıt: /Users/hikmettanriverdi/Documents/ChatGPT/ihale/rapor/qa-team-persistence.json.
|
||
- Üretim kodu değişmedi; önceki 224 test/derleme tekrar edilmedi. Ekip iki sekme yarışı ve yavaş ağdaki bekleme görünümü bu tarayıcı senaryosunda ölçülmedi. Ekip sürüm reddi API testinde doğrulanmış durumda.
|
||
- Test sekmesi kapatıldı; bu testin QA süreci exit 0 ile sonlandırıldı ve geçici depo cleanup akışı tamamlandı. Dış davet gönderilmedi, gerçek hesap oluşturulmadı.
|