Verify email outbox recovery across real process crashes
This commit is contained in:
@@ -833,3 +833,9 @@ Taslak türü seçicisine erişilebilir ad eklendi. Üretim derlemesi geçti. Ö
|
||||
- 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.
|
||||
|
||||
@@ -67,3 +67,5 @@ E-posta aboneliği deposu `notify.sqlite` da `IHALEIST_USER_DATA_DIR` ayarını
|
||||
notify.sqlite abonelik kimliği geçişi: `criteria_key` sütunu eklendi; konu ve kurum kümeleri dahil bütün filtreler aboneliğin kimliğine katılır. Eski tablo işlem içinde yeniden kurulur; id, oluşturulma, aktiflik, son gönderim, görülen ihaleler ve AUTOINCREMENT üst sınırı korunur. Eski eşdeğer yinelenen kayıtlar silinmez; ayrı legacy kimliğiyle korunur. Bozuk eski konu/kurum JSON'u geçişi başarısız yapar ve transaction geri alınır. Yükseltmeden önce notify.sqlite yedeği alınmalı; eski uygulama koduna dönülecekse eski unique kuralını kullanan INSERT nedeniyle yalnız kodu geri almak yeterli değildir: eşleşen eski veritabanı yedeğiyle birlikte geri dönüş gerekir. Yeni sürümde oluşan kayıtların geri dönüşte nasıl korunacağı ayrıca değerlendirilmelidir.
|
||||
|
||||
Kalıcı e-posta kuyruğu aynı notify.sqlite içinde `notification_outbox` tablosundadır. Tam içerik/gönderen/alıcı ve ihale listesi ile sağlayıcı istek kimliği burada korunur; yedeğe dahil edilmelidir. Bir bekleyen grup abonelik başına tek aktif kayıtla tutulur. 120 saniyelik işçi sahipliği, 30 saniyelik sağlayıcı isteğinden uzundur. İlk denemeden 23 saat sonra belirsiz kayıt otomatik tekrar gönderilmez; Resend'in 24 saatlik tekrar önleme süresine güvenli pay bırakılır. Yönetici sağlayıcı kaydını doğrulamalıdır; Mobil PWA sayfasındaki yöneticiye özel E-posta gönderim incelemesi bölümünden kayıt karara bağlanır. Sağlayıcı kabulü doğrulandıysa gönderim kimliği/onay/açıklama ile kapatılır; aksi halde yeniden göndermeden kapatma seçilebilir. Her iki işlem de yeni e-posta göndermez ve açıklamalı karar geçmişini korur. Bekleyen iş varken sağlayıcı hesabı/anahtarı değiştirilmemelidir: tekrar önleme anahtarı farklı sağlayıcı hesapları arasında garanti vermez. Eski uygulamaya dönmek kuyruğu yok sayabileceğinden kod ve DB geri dönüşü birlikte değerlendirilmelidir.
|
||||
|
||||
`node --test tests/outbox-crash.test.mjs`, sağlayıcı kabulünden sonra commit öncesi/sonrası gerçek SIGKILL kurtarmasını izole volume'da sınar. Ayrı süreçte aynı payload/istek kimliği ve SQLite bütünlüğü doğrulanır. Sağlayıcı yerel bir simülatördür; test gerçek Resend hesabının idempotency davranışını veya üretim platformundaki disk kurtarmasını kanıtlamaz.
|
||||
|
||||
Reference in New Issue
Block a user