Sword Backend - Derin Kod Analizi Raporu¶
1. Yönetici Özeti¶
İlk mimari ve güvenlik incelemesinden sonra birkaç kritik sorun düzeltilmiştir: sert kodlanmış OpenAI API anahtarı fallback değeri kaldırıldı, OpenAI model seçimi gpt-4.1 birincil ve gpt-4o fallback olacak şekilde merkezileştirildi, daha önce açığa çıkan anahtar harici olarak iptal edildi, bozuk kimlik doğrulama token cache yapısı ve daha sonra kalan DB-backed auth lookup cache kaldırıldı, tekrarlı API route blokları kaldırıldı ve route inventory testiyle koruma altına alındı, main.py içindeki büyük endpoint aileleri domain router dosyalarına çıkarıldı, makine dosya yüklemeleri artık uzantı, MIME türü ve boyut doğrulaması yapıyor, kullanılmayan ağır geliştirme bağımlılıkları temizlendi, temel Factory, Machine, Quote ve Device silmeleri artık deleted_at kullanıyor, production reference delete guard'ları doğru association-table kolonlarını kullanıyor, production app modüllerindeki print() çağrıları module-level logging ile değiştirildi, legacy Alembic ağacındaki tekrarlı soft-delete migration kaldırıldı, digital competency answer/analysis persistence API contract ile uyumlu hale getirildi, auth, token güvenliği, RBAC, push notification, kayıt, login, OpenAI fallback, dosya yükleme, cihaz CRUD, catalog/reference route'ları, küçük domain route'ları, production reference, route inventory, aktif Alembic migration davranışı, soft-delete davranışı ve calendar event query efficiency için odaklı pytest kapsamı eklendi; GitHub Actions test workflow'u da Python 3.9 uyumlu odaklı test requirements dosyasıyla test suite'i CI'da çalıştırır.
Kod tabanı bakım açısından daha iyi durumdadır, ancak hâlâ üretime hazır değildir. Kalan ana riskler mimari ve operasyonel taraftadır: çıkarılan router'ların çoğu hâlâ servis katmanına taşınması gereken iş mantığı içeriyor, app/crud.py geniş kapsamlı kalıyor, bazı core dışı admin/reference silmeleri hâlâ hard delete kullanıyor, düşük öncelikli bazı sorgu yollarında batching gerekiyor ve production observability için tutarlı request ve iş olayı logging politikası hâlâ tanımlanmalıdır. Yerel disk dosya saklama mevcut internal single-server kullanım için kabul edilebilir; uploads/ kalıcı tutulmalı ve yedeklenmelidir. S3 uyumlu storage artık acil sıradaki iş değil, ileride ölçekleme opsiyonudur.
2. Teknik İnceleme¶
2.1 Kod Kalitesi ve Mimari¶
- Uygulama giriş noktası (
main.py): Eski monolitik controller artık app bootstrap, static mount'lar, açık file-serving route'ları, router inclusion ve geçici OpenAI test uyumluluk shim'iyle sınırlıdır. Domain endpoint'leriapp/routers/altında auth, users, notifications, factories, catalog/reference data, production PDF, digital competency, quote documents/workflows, solution center, tasks, calendar events, sectors, ROI, diagnostics, devices, machines, production references, quotes ve machine images router'larına taşınmıştır. - Route inventory koruması: Tekrarlı API route kayıtları kaldırıldı ve
tests/test_route_inventory.pyaynı(method, path)çiftlerinin tekrar eklenmesini engeller. - Servis katmanı hâlâ ince: OpenAI fallback istemcisi
app/services/openai_client.pyiçine, upload storage mantığıapp/services/upload_storage.pyiçinde kalacak şekilde ayrıldı. İş akışlarının çoğu artıkmain.pyyerine router'larda duruyor; task/calendar/solution/PDF/email mantığı kademeli olarak servis katmanına taşınmalıdır. - Structured logging: Production app modüllerindeki
print()çağrıları module-levellogging.getLogger(__name__)logger'larıyla değiştirildi. Kalan console output yalnızca standalone bakım script'lerindedir; daha geniş request, hata ve iş olayı logging standartları ayrıca tanımlanmalıdır.
2.2 Güvenlik Riskleri¶
- Açığa çıkmış gizli anahtarlar: Sert kodlanmış OpenAI anahtarı fallback değeri
main.pyiçinden kaldırıldı, OpenAI artıkOPENAI_API_KEYortam değişkeninden okunuyor ve daha önce açığa çıkan anahtar harici olarak iptal edildi. - Dosya yüklemeleri: Makine görsel yüklemeleri artık uzantı whitelist'i, MIME türü eşleşmesi ve 12 MiB uygulama seviyesi boyut sınırı uygular (
MAX_UPLOAD_SIZE_BYTES = 12 * 1024 * 1024). Doğrulama, yerel dosya yazma, başarısız yazmada temizlik ve makine görsel URL helper'ları artıkapp/services/upload_storage.pyiçinde durur;main.pymevcut endpoint ve veritabanı davranışını korur. İzin verilen türler, sınır değerinde kabul, desteklenmeyen uzantılar, MIME uyuşmazlığı, büyük dosyalar, boş dosya adının reddi, başarısız çoklu yükleme, görsel listeleme/silme yaşam döngüsü, mobil görsel yükleme/listeleme route'ları, local service persistence, partial-file cleanup ve iki mevcut URL contract'ı (/uploads/...ve/api/uploads/...) için odaklı testler vardır. Mevcut Nginx deployment template'lericlient_max_body_size 100Mayarladığı için sınırı uygulama katmanı belirler. Internal single-server kullanım için yerel disk kabul edilebilir;uploads/deploy sırasında korunmalı, yedeklenmeli ve disk kullanımı izlenmelidir. - Kimlik doğrulama cache'i: Bozuk bellek içi token cache ve DB-backed kullanıcı sorgusundaki
lru_cachewrapper'ı kaldırıldı. Login ve bearer-token doğrulama akışları artık normal veritabanı okumalarına dayanır; kullanıcı durumu ve kimlik bilgisi değişiklikleri istekler arasında hemen görünür kalır.
2.3 Performans ve Ölçeklenebilirlik¶
- Liste ekranı hızı: Görev listesi 437 ms → 23 ms (düzeltildi). Fabrika listesi 523 ms → 24 ms (düzeltildi). Makine listesi 351 ms → 320 ms (düzeltildi 2026-07-01). Bkz. optimization.tr.md.
- Fabrika haritası event-loop güvenliği (2026-07-01):
GET /api/factories/{id}/mindmapartık Graphviz render işlemini doğrudan event loop üzerinde çalıştırmıyor. Endpoint sınırlı async semaphore (MINDMAP_RENDER_CONCURRENCY, varsayılan1) kullanıyor ve token doğrulama, senkron SQLAlchemy okumaları ve Graphviz PDF render işlemini yalnızca render slot'u alındıktan sonra threadpool üzerinden yürütüyor; bu yüzden kuyrukta bekleyen mindmap istekleri veritabanı session'ı tutmuyor. Harita graph üretimiapp/services/factory_mindmap.pyiçine taşındı, render çıktısı paylaşılanfactory_{id}_mindmap.pdfdosyaları yerine her isteğe özel geçici dizin kullanıyor veFileResponsetamamlandıktan sonra dizin temizleniyor. Pythongraphviz==0.20.3paketi artıkrequirements/runtime.txtiçinde pinlidir; sunucu image veya host tarafında Graphvizdotbinary'si yine sağlanmalıdır.dot15.0.0 ile yerel doğrulama: tek gerçek mindmap isteği HTTP 200 ile 165 ms sürdü; altı eşzamanlı gerçek mindmap isteğinin tamamı HTTP 200 döndü ve max süre 790 ms oldu; aynı sırada/api/openapi.json4 ms,/api/factories?limit=117 ms içinde döndü. Odaklı testler async wrapper/threadpool sözleşmesini, izole çıktı dizini temizliğini, consultant erişim reddini ve graph servis render davranışını kapsıyor. - API matrix benchmark (
r100):scripts/performance/altındaki gerçek harness ile tamr100kullanıcı bandı (1/10/20/30/50) koşuldu; çıktılardocs/performance-results/run-20260628-api-matrix/altında.1kullanıcıda yalnızcausers.create(p95 ~1404 ms) vefactories.create(p95 ~2694 ms) 1 saniye hedefini kaçırdı;factories.mindmapGraphviz kurulu olmadığı için dürüstçe atlandı.10kullanıcıda 11 route,20kullanıcıda 28 route,30kullanıcıda 32 route ve50kullanıcıda 50 route 1 saniyeyi aştı; belirgin p95'ler arasındausers.create,auth.token,notifications.system,solutions.createvefactories.createvar.r500,r1000ver5000bandları henüz tamamlanmadı;r100SLO sorunları giderilmeden üst tier koşuları güvenilir karşılaştırma vermez. - Yük davranışı — yavaş vs çöküş: Ölçülen koşular kesintiden önce aşırı yavaşlık gösterir. Mobil okuma mix'inde ~100 eşzamanlı okuyucuya kadar %0 HTTP hatası (yüksek p95). 50 kullanıcıda matrix %0 HTTP hatası ile
users.createp95 ~67 sn — bcrypt, tek worker ve DB pool kuyruğu; süreç çöküşü değil. Kısmi çöküş (timeout, pool tükenmesi, yeniden başlatma) yalnızca agresif 200 VU ramp'ta (~%6 hata). Bkz.docs/load-testing.tr.md#genel-backend-kapasitesi-yavas-vs-cokus(vedocs/general-load-testing.tr.mdiçindeki genel rapor). - Duruma bağlı dosya saklama: Dosyalar hâlâ yerel
uploads/klasöründe tutulur. Bu mevcut internal single-server deployment modeli için kabul edilebilir; klasör kalıcı olmalı, yedeklenmeli ve destructive deploy adımlarından korunmalıdır. S3 uyumlu obje depolama, çoklu sunucu/container veya ephemeral disk senaryoları için gelecekteki ölçekleme opsiyonu olarak tutulmalıdır. - Bellek içi durum: Auth token/user cache riski çözüldü. Kalan global runtime state kullanımları modülerleştirme sırasında incelenmelidir.
2.4 Veri Bütünlüğü¶
- Core kayıtlarda soft delete:
Factory,Machine,QuoteveDeviceartık nullabledeleted_atalanlarına sahiptir. Ana silme yolları quote item, log, task, calendar event ve cihaz consumable linkleri gibi bağlı geçmişi koruyarak kayıtları silinmiş olarak işaretler. Normal CRUD helper'ları ve temel API liste/detay yolları soft-deleted kayıtları gizler; Solution Center soft-deleted factory kayıtlarını reddeder, factory mindmap soft-deleted makineleri dışlar, quote update akışları soft-deleted factory'lere yeniden atamayı reddeder ve cihaz read/update/delete akışları soft-deleted cihazları dışlar. Production reference delete guard'ları artık factory assignment kontrolünüproduction_category_idveproduction_area_idkolonları üzerinden doğru yapar. Core dışı reference/admin varlıkları için ayrı lifecycle kararı hâlâ gereklidir. - Cihaz lifecycle ve schema güçlendirme: Cihaz create/update payload'ları artık pozitif miktar doğrulaması yapan tipli consumable schema kullanır. Cihaz create/update akışları referans verilen consumable kayıtlarının
sarftipindeQuoteItemolarak var olduğunu doğrular; cihaz delete akışı ise consumable link geçmişini koruyarak soft delete yapar. - Alembic migration yolu: Aktif Alembic yolu
alembic_cleandizinidir. Clean migration grafiğinde mevcut baseline-stamped veritabanları için idempotent soft-delete revizyonları bulunur:Factory,MachineveQuoteiçin0002_add_soft_delete_columns,Deviceiçin0003_add_device_soft_delete, digital competency answer score ve analysis persistence için0004_add_digital_competency_answer_score. Upgrade/downgrade idempotence davranışı odaklı migration testleriyle kapsanmıştır. Legacyalembic/versionsağacına eklenen tekrarlı soft-delete revizyonu kaldırılmıştır; proje bilerek eski ağaca dönmedikçe bu ağaca yeni migration eklenmemelidir.
2.5 Üçüncü Taraf Entegrasyonları¶
- OpenAI model seçimi: Model seçimi
app/services/openai_client.pyiçinde merkezileştirildi. Onaylı sıragpt-4.1birincil vegpt-4ofallback olacak şekildedir. - Şişkin bağımlılıklar: Kullanılmayan ağır geliştirme bağımlılıkları
google-cloud-aiplatformvegoogle-cloud-bigquery,requirements/dev.txtiçinden kaldırıldı. CI artık tüm local development freeze dosyasını kurmaz;requirements/runtime.txtile odaklırequirements/test.txtdosyasını kurar, böylece Python 3.9 job'larıpytest==9.0.3gibi uyumsuz dev-only pin'lere takılmaz.
3. Adaptasyon ve Bakım¶
- Takım devralabilir mi? Yüksek zorlukla.
- Adaptasyon süresi: Önce mevcut çökme sorunları ve karmaşık akışlar çözülmelidir.
- Refaktör maliyeti: Orta/kıdemli bir geliştirici için yüksek efor gerektirir.
4. Öncelikli Aksiyonlar¶
- Router'lardan servis çıkarımına geçin: Task, calendar, solution center, PDF/proforma email ve ROI iş mantığını odaklı servis modüllerine taşıyın.
- Observability kapsamını genişletin: Production app kodundaki module-level logger'ların üzerine tutarlı request, hata ve iş olayı logging davranışı tanımlayın.
- Kalan N+1 döngülerini batch edin:
app/crud.pyiçindeki factory create/update relationship atamalarınıin_()sorgularıyla toparlayın. - Entegrasyon testlerini genişletin: Temel oluşturma/güncelleme/silme akışları ve temsilî workflow endpoint'leri için mevcut soft-delete ve router extraction kapsamının ötesinde testler ekleyin.
- Konfigürasyonu güçlendirin: Kalan magic value'ları ve entegrasyon ayarlarını tipli konfigürasyona taşıyın.
- Pydantic V2 temizliği yapın: Deprecated class-based Pydantic config ve
.dict()kullanımlarını güncel API'lere taşıyın. - Kalan reference data lifecycle kararını verin: User, catalog/reference entity, task ve admin taxonomy silmelerinde hard delete'in nerede kabul edilebilir olduğunu belirleyin.
- S3'ü gelecek ölçekleme işi olarak tutun: Internal single-server app için yerel
uploads/kullanın; deployment topolojisi değişirse S3 uyumlu storage'a dönün. - Logging gürültüsünü düşük tutun: Gürültülü diagnostic verileri debug seviyesinde tutun ve hassas payload'ları loglamayın.
- CI'ı yeşil tutun: Yeni servis extraction dilimleri coverage ekledikçe test workflow'unu koruyun.
5. Refaktör İlkeleri¶
- DRY: Tekrarları kaldırın.
- KISS: Yapıyı sadeleştirin.
- SRP: Her modül tek sorumluluk taşısın.
- Separation of Concerns: İş mantığını servis katmanına taşıyın.
- Type hint: Güçlü tipler kullanın.
- Guard clause: İç içe yapıları azaltın.
- Constants: Sabitleri konfigürasyona taşıyın.
- Structured logging:
print()yerine logging kullanın. - Stateless design: Bellek içi duruma bağımlılığı azaltın.
6. Nihai Karar¶
Teknik karar: Refaktör etmeye devam.
Temel SQLAlchemy model yapısı, Alembic migration kurulumu ve test yapısı kullanılabilir durumdadır; ayrıca birkaç kritik güvenlik sorunu zaten düzeltilmiştir. Proje sıfırdan yazılmamalıdır, ancak üretime hazır sayılmadan önce routing, servis katmanı, veri yaşam döngüsü, sorgu performansı, logging ve dosya saklama taraflarında disiplinli refaktör gerektirir.
7. Sıradaki Mimari Dilim¶
İlk router extraction dalgası devam ediyor: tekrarlı API route blokları kaldırıldı, machine image route'ları app/routers/machine_images.py içine, core machine route'ları app/routers/machines.py içine, core quote/quote-item route'ları app/routers/quotes.py içine, cihaz CRUD route'ları app/routers/devices.py içine, production reference route'ları app/routers/production_references.py içine ve catalog/reference route'ları domain router'larına taşındı. Sıradaki dar refaktör, davranışı değiştirmeden daha yan etkili workflow route'larını servis katmanı sınırlarıyla birlikte ele almak olmalıdır.
Önerilen şekil:
tests/test_route_inventory.pyyeşil kalmalı; tekrarlı route kayıtları geri gelmemeli.- Her seferinde tek bir workflow route ailesini servis sınırıyla birlikte ele alın.
- PDF/proforma gibi yan etkili akışlarda önce mevcut davranışı testlerle sabitleyin.
- Her dilimden sonra focused testleri ve full-suite CI komutunu çalıştırın.
8. Kısa Değerlendirme Tablosu¶
| Kategori | Durum | Risk | Not / Aksiyon |
|---|---|---|---|
| Kod Kalitesi | Orta | Orta | main.py artık yalın bootstrap/router wiring seviyesinde ve tekrarlı route'lar testle korunuyor; kalan borç daha çok servis çıkarımı ve geniş CRUD temizliğidir. |
| Güvenlik | İyi | Orta | Kritik konular düzeldi: açığa çıkan anahtar yönetimi, auth cache kaldırma, upload doğrulaması ve daha güvenli silmeler. Production config, storage operasyonları ve logging politikası hâlâ güçlendirilmeli. |
| Mimari | Orta | Orta | Ana API yüzeyinde domain router'ları yerinde; sonraki risk iş mantığının hâlâ router'larda kalması ve servis katmanına tam taşınmamış olmasıdır. |
| Logging | Orta | Orta | Production app modülleri print() yerine module logger kullanıyor; request, hata ve iş olayı logging standartları hâlâ tanımlanmalı. |
| Veritabanı | Orta | Orta | Soft delete ve aktif Alembic migration kapsamı güçlendi; kalan iş core dışı lifecycle kararları ve birkaç batching adayıdır. |
| API/Entegrasyon | Orta | Orta | OpenAI fallback, upload contract'ları ve digital competency persistence kapsam altında; kalan entegrasyon ayarları tipli config'e taşınmalı. |
| Test/Deployment | Orta | Orta | Odaklı pytest kapsamı ve GitHub Actions CI var; kapsam uçtan uca business workflow'lara genişletilmeli. |
| Devredilebilirlik | Orta | Orta | Proje artık devasa main.py tarafından bloke değil; onboarding'i hâlâ router'lara yayılmış iş mantığı ve geniş CRUD helper'ları yavaşlatıyor. |
9. Canlı Refaktör Kontrol Listesi¶
Değişiklikler uygulandıkça güncellenir. Tamamlanan maddeler denetim izi olarak korunur.
Kritik / Güvenlik¶
- [x] Sert kodlanmış OpenAI API anahtarı fallback değerini kaldırın —
main.py - [x] Eski açığa çıkmış anahtarı platform.openai.com üzerinden iptal edin — Harici / manuel, proje sahibi tarafından doğrulandı
- [x] Bozuk
token_cachemantığını kaldırın — bellek sızıntısı ve çökme riski - [x] Process-local auth user/token cache ve DB-backed
lru_cachelookup kullanımını kaldırın —app/auth.py,tests/test_token_security.py
Hata / Çökme¶
- [x] OpenAI model seçimini merkezileştirin —
gpt-4.1birincil,gpt-4ofallback - [x] Tekrarlanan mobil makine görsel yükleme endpoint tanımlarını azaltın
- [x]
QuoteItemDetailSQLAlchemy ilişki çakışması uyarısını düzeltin —app/models.py - [x] OpenAI model fallback ve son hata davranışını network çağrısı yapmadan test edin —
tests/test_openai_fallback.py
Kod Kalitesi / Düşük Risk¶
- [x] Tekrarlanan ReportLab import bloğunu kaldırın —
main.py - [x]
__pycache__,sword.db,temp/PDF çıktılarını git takibinden çıkarın - [x]
.gitignoreiçineuploads/vesword.dbkurallarını ekleyin - [x] Kullanılmayan ağır dev bağımlılıklarını temizleyin
- [x] MkDocs Material Türkçe dil geçişini i18n Material alternates ayarıyla düzeltin —
mkdocs.yml - [x] Tekrarlı bir makine marka/model route bloğunu kaldırın —
main.py - [x] Windows ve Linux için IP-only ve SSL'siz kurulum/dağıtım rehberini İngilizce (
work.md) ve Türkçe (work-tr.md) olarak hazırlayın
Mimari / Daha Yüksek Risk¶
- [x] Dosya yüklemelerini güvenli hale getirin — MIME doğrulama, 12 MiB boyut sınırı, uzantı whitelist'i ve upload storage helper extraction —
app/services/upload_storage.py,main.py - [x]
Factory,Machine,Quoteiçin soft delete (deleted_at) uygulayın —app/models.py+ Alembic migration - [x] Soft-delete migration yolunu doğrulayın ve reconcile edin — aktif yol
alembic_clean, idempotent revizyon0002_add_soft_delete_columns - [x] Legacy Alembic ağacındaki tekrarlı soft-delete migration dosyasını kaldırın —
alembic/versions - [x] Aktif soft-delete revizyonları için odaklı migration idempotence testi ekleyin —
tests/test_migrations.py - [x] Primary calendar event N+1 query path'ini eager loading ve query-count regression coverage ile düzeltin —
app/crud.py,tests/test_crud_query_efficiency.py - [x]
main.pydosyasınıapp/routers/+app/services/yapısına bölmeye başlayın —app/routers/machine_images.py,app/routers/machines.py,app/routers/quotes.py,app/routers/devices.py,app/routers/production_references.py - [x] Production reference route'larını çıkarın ve association delete guard hatalarını düzeltin —
app/routers/production_references.py,app/crud.py,tests/test_production_references.py - [x] Cihaz lifecycle ve request schema davranışını güçlendirin — soft delete, tipli consumable payload,
sarfconsumable doğrulaması ve odaklı API/migration testleri —app/routers/devices.py,app/schemas.py,app/models.py,alembic_clean/versions/0003_add_device_soft_delete.py,tests/test_devices.py,tests/test_migrations.py - [x] Production app
print()kullanımlarını structured logging ile değiştirin —main.py,app/crud.py,app/auth.py,app/routers/machine_images.py - [ ] Internal single-server kullanım için yerel
uploads/saklamayı koruyun; S3 uyumlu storage'ı yalnızca ölçekleme/deployment topolojisi gerektirirse yeniden değerlendirin - [x] Auth, token güvenliği, kayıt, login, RBAC, push notification, cihaz CRUD ve dosya yükleme doğrulaması için odaklı pytest testleri ekleyin
- [x] Pytest için GitHub Actions test workflow'u ekleyin —
.github/workflows/tests.yml - [x] CI dependency resolution hatasını full dev requirements kurulumu yerine odaklı test requirements kullanarak düzeltin —
.github/workflows/tests.yml,requirements/test.txt - [x] Uygulama database engine oluşturmayı SQLite CI URL'leriyle uyumlu hale getirirken PostgreSQL pool ayarlarını koruyun —
app/database.py - [x] Core soft-delete davranışı ve quote delete API görünürlüğü için odaklı pytest kapsamı ekleyin —
tests/test_soft_deletes.py - [x] Web ve mobil makine görsel yükleme yaşam döngüsü kapsamını genişletin —
tests/test_file_uploads.py - [x] Local persistence, oversize cleanup ve URL contract koruması için doğrudan upload storage service kapsamı ekleyin —
tests/test_upload_storage_service.py - [x] Cihaz lifecycle güçlendirmesine karar verin — soft delete, geçmiş consumable linklerinin korunması ve tipli consumable request schema'ları
- [ ] Temel oluşturma/güncelleme/silme iş akışları için pytest kapsamını genişletin
- [x] Auth, factories, machines, tasks ve users/me için k6 API yük testi betiği ekleyin —
scripts/load/api-load.js,scripts/load/README.md - [x] Metodoloji ve ilk smoke koşusu (5 VU, ~31 sn, %0 hata, p95 203 ms) ile yük testi sonuç dokümantasyonu —
docs/load-testing.md,docs/load-testing.tr.md,mkdocs.yml - [x] Varsayılan load senaryosu koşu #2 kaydı (50→200 VU, ~4 dk 30 sn, %6,05 hata, p95 2,78 sn, eşikler geçilemedi) —
docs/load-testing.md,docs/load-testing.tr.md - [x] Sabit yük senaryoları (
load-20,load-50,load-100) ve koşu #3–#5 kaydı —scripts/load/api-load.js,docs/load-testing.md,docs/load-testing.tr.md - [x] Yük testi bulguları ve önerilen sonraki adımlar (~50 VU/worker kapasite, pool/Uvicorn darboğazları) —
docs/load-testing.md,docs/load-testing.tr.md - [x] k6 payload test betikleri (1/6/12 MiB yükleme, büyük okuma/indirme) —
scripts/load/payload-upload.js,scripts/load/payload-read.js,scripts/load/lib/common.js,scripts/load/generate_fixtures.py - [x] Eşzamanlılık vs payload testi metodolojisi ve payload smoke koşuları P1–P2 —
docs/load-testing.md,docs/load-testing.tr.md,scripts/load/README.md - [x] k6 kurulum ve çalıştırma için çoklu platform talimatları (macOS, Linux, Windows) —
docs/load-testing.md,docs/load-testing.tr.md,scripts/load/README.md - [x] PostgreSQL hacim/cardinality test altyapısı (seed tier, 1 istemci probe, k6 volume-baseline, sorgu şekli testleri) —
scripts/volume/,tests/test_volume_query_efficiency.py,docs/volume-testing.md,docs/volume-testing.tr.md - [x] Hacim testi koşu #1 T1 kaydı (200/4k/5k satır, factories p95 345 ms, tasks p95 437 ms, 1 VU %0 hata) —
docs/volume-results/run-20260626-051613/,docs/volume-testing.md - [x] Hacim testi koşu #2 T1 görev listesi düzeltmesi sonrası —
docs/volume-results/run-20260629-171059/,docs/optimization.tr.md - [x] İngilizce ve Türkçe dillerinde teknik olmayan, sonuç odaklı genel yük ve hacim testi dokümantasyonu eklendi —
docs/general-load-testing.md,docs/general-volume-testing.md,docs/general-load-testing.tr.md,docs/general-volume-testing.tr.md - [x] Seed satır tier'ları (100/500/1000/5000) ve kullanıcı tier'ları (1/10/20/30/50) için tam API matrix benchmark altyapısı: tam yeniden seed, kanonik route kapsamı ve workflow-safe çalıştırma sırası —
scripts/performance/,tests/test_api_matrix_catalog.py - [x] Matrix oluşturma sırasında bulunan benchmark engelleri düzeltildi: seed ve workflow kayıtları için cleanup idempotence,
broadcast-notificationliste response şekli, public kullanıcı kaydında çift hash ve varsayılan admin yükseltme davranışı —scripts/performance/seed_api_matrix_db.py,scripts/performance/workflow.py,app/routers/admin.py,app/routers/users.py,app/auth.py - [x] Yama sonrası 100 satır / 1 kullanıcı matrix baseline'ı taze sunucu sürecinde doğrulandı: çalıştırılabilir tüm route'lar geçti,
users.create1332,91 ms; Graphviz olmadanfactories.mindmapdürüstçe atlandı — yerel benchmark koşusu 2026-06-28 - [x] Tam
r100kullanıcı eşzamanlılık bandı (1,10,20,30,50) tamamlandı; senaryo çıktılarıdocs/performance-results/run-20260628-api-matrix/altına yazıldı.users.create1kullanıcıda bile hedefin üstünde; geniş SLO ihlali10kullanıcıdan itibaren başlıyor — yerel benchmark koşusu 2026-06-28 - [ ] Kalan seed satır tier'larını (
r500,r1000,r5000)1/10/20/30/50kullanıcıyla koşup birleşik bulguları yayımlayın; öncer100SLO sorunlarını giderin —r100/vu-50tek başına birkaç dakika sürdü, üst tier'lar kesintisiz uzun koşu gerektirir - [ ] Matrix baseline'ında
users.createsüresini parola hash veya QR üretim semantiğini zayıflatmadan 1 saniye hedefinin altına indirin