fix: persist weekly brief delivery claims and accepted messages

This commit is contained in:
2026-09-06 14:32:56 +03:00
parent d3a52caf2b
commit 99a7f2f571
6 changed files with 213 additions and 10 deletions
+8
View File
@@ -1070,3 +1070,11 @@ Taslak türü seçicisine erişilebilir ad eklendi. Üretim derlemesi geçti. Ö
- Tercih her parça öncesi kontrol ediliyor. Bir parça hata verirse kalan Telegram parçaları gönderilmiyor; e-posta kanalı ayrıca deneniyor. Telegram `denenen/kabul/hata` sayaçları artık mesaj parçası sayısıdır. `gonderilen` en az bir mesaj kabulü bulunan kullanıcı sayısıdır, tüm parçaların tamamlandığı anlamına gelmez; hatalar birlikte değerlendirilmelidir.
- Doğrulama: 248 testlik tüm süit ve ek 1 Telegram taşıma testi geçti; build başarılı (mevcut büyük paket uyarısı sürüyor). 205 takip kaydı, 15 üzeri sonuç, tarih sınırları, uzun Türkçe/emoji içeriğin birebir birleşmesi, parça hatası ve gerçek HTTP çağrısı yerine sahte taşıyıcı ile düz metin gövdesi doğrulandı. Gerçek mesaj gönderilmedi.
- Açık işler: kalıcı parça/kanal teslimat kaydı, zamanlayıcı/yeniden deneme, sağlayıcı oran limitleri ve izinli test alıcısında kabul. Bu aşama çökme sonrası tam-bir-kez teslimat garantisi vermez. Kaynakta sözleşme tarihi bulunmadığında mevcut ihale tarihi yedeği kullanılıyor; geçmiş sonuç tarihi kaynak doğruluğu ayrıca doğrulanmalı.
### 2026-09-06 — Haftalık özet kalıcı teslimat ve kesinti deneyi
- Üretim haftalık gönderim işlevi özel veri volume'undaki `brief.sqlite` deposuna bağlandı. Hafta (İstanbul pazartesisi), kullanıcı ve mesaj/parça konumu bazında kalıcı kayıt var. İlk mesaj planı transaction içinde saklanıyor; aynı haftada farklı içerik veya alıcı planı otomatik yeniden gönderilmiyor. Bekleyen içerik değişimleri inceleme durumuna alınıyor.
- SQLite transaction ile tek işçi 120 saniyeliğine mesajı sahipleniyor. Kabul edilen mesaj sonraki çağrıda atlanıyor. Süresi dolmuş yarım çağrı veya sağlayıcı/yerel kabul kaydı hatası belirsiz tutuluyor; otomatik tekrar yok. Telegram kaydı mevcut taşıyıcının boolean kabulüne dayanır, Telegram message_id henüz saklanmıyor. `atlanan` kabul kaydı nedeniyle atlanan mesajları, `bekleyen` aktif/belirsiz/değişen plan engellerini raporluyor.
- Zamanlayıcı gönderimden önce yeni hafta-tamamlandı dosyası yazmıyor. Kaynak yükleme hatası gönderim kaydı oluşturmuyor; sonraki Pazartesi saatlik kontrolde tekrar denenebilir. Eski brief-son.json geçiş haftasında çift gönderimi önlemek için hâlâ okunuyor; eski kayıt gerçek teslimatı kanıtlamadığından geçiş haftası kontrolü gerekiyor.
- Doğrulama: 256 test geçti; build başarılı. Yeni testler kalıcı kabul sonrası tekrar, aynı anda iki gönderici, kullanıcı/hafta ayrımı, belirsiz hata, değişen içerik, kaynak hatası sonrası devam, gerçek alt süreci SIGKILL ile durdurma ve tam volume yedek/geri yüklemeden sonra tekrar engelini kapsıyor. Gerçek mesaj gönderilmedi.
- Açık kalanlar: belirsiz kayıtları sağlayıcı kanıtı ve denetim iziyle karara bağlayan yönetici akışı, Telegram sağlayıcı mesaj kimliği, gerçek sağlayıcı kabulü, Pazartesi tamamen kapalı kalmış sunucunun telafisi ve geçiş haftası operasyonu. Bu aşama bütün haftalık bildirim kabul maddelerini kapatmaz; plan aktif.
+4
View File
@@ -85,3 +85,7 @@ Rakip izleme (`rakip_izleme`) da içerik sürümü zorunlu anahtarlara dahil edi
Bildirim tercihleri (`reminder`) sürümlü yazım sözleşmesine dahil edildi. Saat alanları HH:mm, pushEnabled/quietEnabled alanları boolean olmalıdır. Frontend/backend birlikte güncellenmelidir. Eski e-postaEnabled kaydı e-posta aboneliği iptali anlamına gelmez; gönderimler abonelik yönetiminden denetlenir.
Haftalık özet `brief` anahtarı user-store tarafından artık kabul edilir. `/api/me/brief` GET tercih ve revision döndürür; metin/brief önizlemesi için `?preview=1` gerekir. POST boolean kapali ve okunan revision ister. Frontend/backend birlikte güncellenmelidir; eski sürüme dönmek brief kaydını tekrar reddeder ve opt-out tercihini okuyamayabilir.
Haftalık özet teslimat deposu `IHALEIST_USER_DATA_DIR/brief.sqlite` içindedir (ayar yoksa `server/data`). Alıcı, haftalık mesaj planı, mesaj içeriği, parça konumu, işçi sahipliği ve kabul/belirsizlik kayıtlarını içerir; özel veridir. Tam volume yedeği bu SQLite dosyasını kapsar, yalnız kullanıcı/belge yedeği kapsamaz. Dosya 0600, yeni dizin 0700 oluşturulur. Kod geri dönüşü bu kayıtları yok sayıp aynı haftanın özetini tekrar gönderebilir; eski kodun otomatik gönderimini açmadan geçiş haftası sağlayıcı kayıtları değerlendirilmelidir.
Eski `server/data/brief-son.json` silinmez: eski sürümün aynı hafta için işaretlediği otomatik gönderim geçişte tekrar yapılmaz. Eski sürüm bu işareti göndermeden önce yazdığı için bu kayıt teslimatı kanıtlamaz. Geçiş haftası manuel kontrol gerektirir. Yeni zamanlayıcı bu dosyaya tamamlandı kaydı yazmaz; kaynak yüklenemezse Pazartesi sonraki saatlik kontrolde tekrar yükleyebilir. Sağlayıcı çağrısına girilmiş fakat kabulü doğrulanamamış mesajlar otomatik yeniden gönderilmez. 120 saniyelik sahipliği sona eren yarım kayıt da belirsiz olur. `brief-outbox.mjs` içindeki salt-okuma `inspect()` sonuçları kayıt incelemesine yardım eder; yönetici karar ekranı/karar geçmişi henüz tamamlanmadı. Kayıtları silmek veya doğrudan pending yapmak yeniden mesaj gönderme riski taşır.