# KampüsKafe Yıldız Savaşı v1.4.1 — Production Test Raporu

**Test tarihi:** 27 Ağustos 2026 (UTC)  
**Test ortamı:** Node.js 22.16.0, npm 10.9.2, Python 3.13.5, Chromium 144, Linux x86_64

## Sonuç

Kaynak ağacı üzerindeki zorunlu otomatik kalite kapıları tamamlandı. v1.4.1; yayınlanan topluluk bölümlerinin 6. bölümden itibaren başlangıç bölümleriyle aynı katalogda gösterilmesini, kaynak bilgilerinin görünür olmasını, boş/atanmamış tuval tabanlı bölüm oluşturucuyu, satır/sütun kalan yıldız göstergelerini, mobil çift dokunma yakınlaştırma korumasını ve iOS Ana Ekran viewport iyileştirmelerini içerir.

Hedef cPanel hesabının Passenger, SSL ve gerçek MySQL kimlik bilgileri bu test ortamında bulunmadığından, canlı sunucuya özgü son kapı hedef hesapta ayrıca çalıştırılmalıdır.

## Otomatik test özeti

| Test grubu | Sonuç | Kapsam |
|---|---:|---|
| Node.js birim/HTTP/servis/çözümleyici testleri | **51/51 geçti** | Yapılandırma, API, roller, moderasyon, çözümleyici, oluşturucu, PWA ve release kontrolleri |
| Rastgele çözümleyici karşılaştırması | **240/240 geçti** | Uygulama çözümleyicisi bağımsız kaba kuvvet sayımıyla karşılaştırıldı |
| Yerleşik bölüm doğrulaması | **15/15 geçti** | Kolay, Orta ve Zor için beşer bölüm; geçerli ve tek çözüm |
| Chromium mobil ana akış E2E | **Geçti** | 390×844 dokunmatik görünüm, oyun, atölye, şablon, taşıma, viewport ve sonuç akışı |
| Chromium kılavuz regresyonu | **Geçti** | Oyun/atölye `1 → yeşil 0 → kırmızı negatif` göstergeleri ve sabit hücre geometrisi |
| 14×14 özel tahta | **Geçti** | 196 hücre, zorluktan bağımsız boyut, boş tuval, yakınlaştırma ve worker çözümleyici |
| Release kalite kapısı | **Geçti** | PHP/gizli anahtar/gerçek `.env` yok; manifest, SW, JS ve migration kontrolleri |
| Production kaynak denetimi | **Geçti** | Kullanıcı arayüzü, Grid, oluşturucu ve PWA gereksinimleri |
| Güvenlik kaynak taraması | **Geçti** | Riskli dinamik kod, wildcard CORS, zayıf hash ve sabit sır kalıpları bulunmadı |

## Doğrulanan katalog davranışları

- Ana zorluk kartı yayınlanmış topluluk bölümünü toplam sayıya ekler ve `6 bölüm` gibi doğrudan toplam gösterir.
- Ayrı topluluk grubu bulunmaz; ilk yayın ilgili zorlukta 6. bölüm olarak beş başlangıç bölümünün hemen ardından yer alır.
- Yeni yayınlar eskiden yeniye sabit sıralamayla eklenir; önceki bölüm numaraları değişmez.
- Yayın kartı hazırlayan kişi, üniversite, topluluk, tahta boyutu ve yayın tarihini gösterir.
- Yayın kartında son kullanıcıya test sayısı gösterilmez.
- Tahta boyutu ve yayın tarihi `6×6 · 27 Ağu 2026` biçiminde tek metadata satırında gösterilir.
- Yarım bırakılan topluluk bölümü ana ekrandan sürdürüldüğünde katalog numarası korunur.
- Aynı yayın Topluluk Laboratuvarı → Yayınlanan ekranında da bulunmaya devam eder.
- Public özet API’si ve sayfalı yayın API’si kimlik doğrulaması olmadan yalnızca yayınlanmış kayıtları döndürür; çözüm yıldızlarını açıklamaz.

## Doğrulanan oluşturucu davranışları

- Yeni tahta bütün hücreleri atanmamış durumda açar.
- Boş hücreler herhangi bir bölge sayılmaz ve gönderimi engeller.
- “Yeni bölge” benzersiz kimlik üretir; renk yalnızca görsel ayırıcıdır.
- Silgi/Boş aracı hücreyi atanmamış duruma döndürür.
- Oluşturulan, kullanılan ve boş hücre sayaçları güncellenir.
- Kopuk bölge parçaları hücrelerde ve bölge seçicisinde görünür uyarı alır.
- Satır/sütun şablonu varsayılan olarak yalnızca boş hücrelere uygulanır.
- Şablon açmak veya uygulamak çözüm yıldızlarını silmez.
- Yakınlaştırılmış tahtada ayrı taşıma modu, boyama/işaretleme yan etkisini engeller.
- Sunucu tam `n` kesintisiz bölge, geçerli çözüm ve tek çözüm koşullarını yeniden doğrular.

## Mobil ve PWA kontrolleri

- Oyun ve atölye tahtalarında `touch-action:none` uygulanır.
- iOS gesture olayları ve çoklu dokunma yakınlaştırması engellenir.
- Uygulama içindeki `dblclick` varsayılan yakınlaştırma/seçim eylemi engellenir; işaret döngüsünün tıklamaları iptal edilmez.
- `viewport-fit=cover`, güvenli alan değişkenleri ve `apple-mobile-web-app-capable` ayarları bulunur.
- Görsel viewport ve layout viewport değişiklikleri `--app-height` değişkenine yansıtılır.
- Standalone/fullscreen modunda uygulama yüzeyi güvenli alt alanı kaplar.
- Service worker API yanıtlarını cache'e almaz ve v1.4.1 kabuk dosyalarını önbellekler.
- 16px altındaki form yazı boyutlarının iOS odak yakınlaştırması oluşturması engellenir.

## Güvenlik ve paket kontrolleri

- Bearer erişim anahtarı ve ayrı üretici/testçi/yönetici rolleri
- Anahtarların pepper ile özetlenmesi
- Parametreli MySQL sorguları ve transaction tabanlı moderasyon kararı
- Origin, içerik tipi, gövde limiti ve rate limit kontrolleri
- CSP, frame engeli, `nosniff` ve izin politikası başlıkları
- Çözümleyici süre, node, eşzamanlılık ve kuyruk sınırları
- `.php`/`.phtml`: **0**
- Production ZIP içindeki `node_modules`: **0**
- Production ZIP içindeki gerçek `.env`: **0**
- Paket içinde canlı `KK-...` erişim anahtarı: **0**
- MySQL sürücüsü: `mysql2` **3.23.4**, tam sürüme sabitlenmiş

## Hedef cPanel'de zorunlu son kapı

```bash
npm ci --omit=dev --ignore-scripts
npm run db:migrate
npm run db:smoke
npm run db:integration
npm test
npm run release:check
npm run production:audit
npm run security:scan
```

Paylaşımlı cPanel üzerinde gerçek Chromium başlatan `npm run test:browser` zorunlu değildir; bu paket hazırlanırken ayrı release ortamında geçmiştir. Ardından uygulamayı yeniden başlatın ve:

```text
GET /api/health
GET /api/ready
```

uçlarını kontrol edin. `/api/ready` HTTP 200, `ok: true` ve `database: "mysql"` vermeden canlı trafik yönlendirilmemelidir.

## Kapsam sınırı

Otomatik testler uygulama mantığı, HTTP katmanı, mobil Chromium davranışı, güvenlik kapıları, çözümleyici ve paket yapısını doğrular. Gerçek iPhone modeline/iOS sürümüne, cPanel Passenger yapılandırmasına, SSL yönlendirmesine ve sunucu kaynak sınırlarına özgü son kontrol yalnızca hedef ortamda yapılabilir.
