Ana içeriğe geç

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'leri app/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.py aynı (method, path) çiftlerinin tekrar eklenmesini engeller.
  • Servis katmanı hâlâ ince: OpenAI fallback istemcisi app/services/openai_client.py içine, upload storage mantığı app/services/upload_storage.py içinde kalacak şekilde ayrıldı. İş akışlarının çoğu artık main.py yerine 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-level logging.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.py içinden kaldırıldı, OpenAI artık OPENAI_API_KEY ortam 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ık app/services/upload_storage.py içinde durur; main.py mevcut 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'leri client_max_body_size 100M ayarladığı 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_cache wrapper'ı 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}/mindmap artık Graphviz render işlemini doğrudan event loop üzerinde çalıştırmıyor. Endpoint sınırlı async semaphore (MINDMAP_RENDER_CONCURRENCY, varsayılan 1) 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 üretimi app/services/factory_mindmap.py içine taşındı, render çıktısı paylaşılan factory_{id}_mindmap.pdf dosyaları yerine her isteğe özel geçici dizin kullanıyor ve FileResponse tamamlandıktan sonra dizin temizleniyor. Python graphviz==0.20.3 paketi artık requirements/runtime.txt içinde pinlidir; sunucu image veya host tarafında Graphviz dot binary'si yine sağlanmalıdır. dot 15.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.json 4 ms, /api/factories?limit=1 17 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 tam r100 kullanıcı bandı (1/10/20/30/50) koşuldu; çıktılar docs/performance-results/run-20260628-api-matrix/ altında. 1 kullanıcıda yalnızca users.create (p95 ~1404 ms) ve factories.create (p95 ~2694 ms) 1 saniye hedefini kaçırdı; factories.mindmap Graphviz kurulu olmadığı için dürüstçe atlandı. 10 kullanıcıda 11 route, 20 kullanıcıda 28 route, 30 kullanıcıda 32 route ve 50 kullanıcıda 50 route 1 saniyeyi aştı; belirgin p95'ler arasında users.create, auth.token, notifications.system, solutions.create ve factories.create var. r500, r1000 ve r5000 bandları henüz tamamlanmadı; r100 SLO 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.create p95 ~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 (ve docs/general-load-testing.tr.md iç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, Quote ve Device artık nullable deleted_at alanları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_id ve production_area_id kolonları ü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 sarf tipinde QuoteItem olarak 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_clean dizinidir. Clean migration grafiğinde mevcut baseline-stamped veritabanları için idempotent soft-delete revizyonları bulunur: Factory, Machine ve Quote için 0002_add_soft_delete_columns, Device için 0003_add_device_soft_delete, digital competency answer score ve analysis persistence için 0004_add_digital_competency_answer_score. Upgrade/downgrade idempotence davranışı odaklı migration testleriyle kapsanmıştır. Legacy alembic/versions ağ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.py içinde merkezileştirildi. Onaylı sıra gpt-4.1 birincil ve gpt-4o fallback olacak şekildedir.
  • Şişkin bağımlılıklar: Kullanılmayan ağır geliştirme bağımlılıkları google-cloud-aiplatform ve google-cloud-bigquery, requirements/dev.txt içinden kaldırıldı. CI artık tüm local development freeze dosyasını kurmaz; requirements/runtime.txt ile odaklı requirements/test.txt dosyasını kurar, böylece Python 3.9 job'ları pytest==9.0.3 gibi 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

  1. 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.
  2. 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.
  3. Kalan N+1 döngülerini batch edin: app/crud.py içindeki factory create/update relationship atamalarını in_() sorgularıyla toparlayın.
  4. 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.
  5. Konfigürasyonu güçlendirin: Kalan magic value'ları ve entegrasyon ayarlarını tipli konfigürasyona taşıyın.
  6. Pydantic V2 temizliği yapın: Deprecated class-based Pydantic config ve .dict() kullanımlarını güncel API'lere taşıyın.
  7. 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.
  8. 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.
  9. Logging gürültüsünü düşük tutun: Gürültülü diagnostic verileri debug seviyesinde tutun ve hassas payload'ları loglamayın.
  10. 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:

  1. tests/test_route_inventory.py yeşil kalmalı; tekrarlı route kayıtları geri gelmemeli.
  2. Her seferinde tek bir workflow route ailesini servis sınırıyla birlikte ele alın.
  3. PDF/proforma gibi yan etkili akışlarda önce mevcut davranışı testlerle sabitleyin.
  4. 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_cache mantığını kaldırın — bellek sızıntısı ve çökme riski
  • [x] Process-local auth user/token cache ve DB-backed lru_cache lookup 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.1 birincil, gpt-4o fallback
  • [x] Tekrarlanan mobil makine görsel yükleme endpoint tanımlarını azaltın
  • [x] QuoteItemDetail SQLAlchemy 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] .gitignore içine uploads/ ve sword.db kuralları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, Quote iç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 revizyon 0002_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.py dosyası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, sarf consumable 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-notification liste 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.create 1332,91 ms; Graphviz olmadan factories.mindmap dürüstçe atlandı — yerel benchmark koşusu 2026-06-28
  • [x] Tam r100 kullanı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.create 1 kullanıcıda bile hedefin üstünde; geniş SLO ihlali 10 kullanı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/50 kullanıcıyla koşup birleşik bulguları yayımlayın; önce r100 SLO sorunlarını giderin — r100/vu-50 tek başına birkaç dakika sürdü, üst tier'lar kesintisiz uzun koşu gerektirir
  • [ ] Matrix baseline'ında users.create süresini parola hash veya QR üretim semantiğini zayıflatmadan 1 saniye hedefinin altına indirin