Belirti (somut örnek)
ongame.ai/admin/games/d5ff84a6-7b45-4c54-8bc2-759275a3678b ("Swipe & Slay", Erdem) açılınca "Game Not Found — The game session you requested could not be found."
Oyun aslında tamamen sağlam: DB'de mevcut, is_archived=false, oyun listesinde #1, ve admin MCP (get_game_details, get_game_iterations, get_iteration_context) tüm veriyi sorunsuz döndürüyor. Sorun yalnızca web detay sayfasında.
Mevcut davranış (kanıtlanmış)
Detay sayfası iki backend endpoint'i çağırıyor, ikisi de 500 dönüyor (prod Cloud Run logları, 12:23→12:48 boyunca sürekli, tek oyuna özgü):
GET /api/admin/games/{id}/details
GET /api/admin/games/{id}/iterations?reconstruct_prompts=true
Frontend (GameDetailClient) bu 500'leri alınca "Game Not Found" basıyor.
Kök-neden: Cloud Run 32 MiB yanıt limiti
App yanıtı üretiyor (uvicorn access logu 200) ama Cloud Run egress'te kesip istemciye 500 döndürüyor. Kanıt:
- Cloud Run sistem logu (
run.googleapis.com/varlog/system): WARNING: Response size was too large. Please consider reducing response size. — platform kaynaklı, app değil.
- Büyüme→eşik geçişi:
/details son başarılı 200 = 30,240,481 byte (~28.8 MB), ardından kalıcı 500 (32 MiB = 33.5 MB eşiği).
- Trace-join: taze trafikte 17 size-uyarısı ↔ 17 adet 500, birebir; her 500'ün (5 details + 12 iterations) aynı trace'inde size-uyarısı var.
- Kontrast: küçük kardeş oyun (Paddle Epoch Duel)
/details=47 KB, /iterations=443 KB → 200, sorunsuz.
Payload'u şişiren: bu oyunun 244 iteration_snapshot'ı (≈22 MB ham metin) reconstruct_prompts=true ile her iterasyon için prompt'a genişletiliyor → toplam 32 MB'ı aşıyor. Mekanizma: yanıt boyutu iterasyon sayısıyla sınırsız büyüyor, limit ise sabit 32 MB. Dolayısıyla bu tek oyuna özgü bir kaza değil — yeterince iterasyon biriken her oyun aynı eşiği geçecektir (yalnız Swipe & Slay'de doğrulandı; genel risk mekanizmadan çıkıyor).
Etki
Admin, yeterince büyük/uzun oyunların detay sayfasını hiç açamıyor (debug/gözlem körlüğü); oyun büyüdükçe kalıcılaşıyor. User-facing değil (yalnız admin paneli). Veri kaybı yok.
Kapsam dışı bırakılanlar (yanlış teşhis tuzakları)
Veri silinmesi/arşiv DEĞİL · RLS/JWT DEĞİL · Supabase 521 (12:23'teki anlık blip) DEĞİL · yüklenen asset DEĞİL (oyunun 55 image asset'i URL olarak ~2 MB, prompt'a gömülmüyor; mesaj/snapshot'larda 0 base64).
Önerilen yön (en dar fix)
/iterations ve /details payload'unu sınırla — yanıtın iterasyon sayısıyla sınırsız büyümesini engelle:
/iterations'ı paginate et (sayfa başına N iterasyon), ve/veya reconstruct_prompts'u lazy yap — prompt'u yalnız kullanıcı bir iterasyonu açtığında, tek iterasyon için kur (zaten get_iteration_context per-iter çalışıyor).
/details'i de büyük alt-koleksiyonları (tüm iterasyon/mesaj içeriği) inline göndermeyecek şekilde kırp/paginate.
Hedef: tek HTTP yanıtının 32 MiB'ı asla aşmaması.
Nasıl doğrulanır
- Repro: büyük bir oyunu (örn.
d5ff84a6-7b45-4c54-8bc2-759275a3678b) admin detayda aç → "Game Not Found"; DevTools'ta /details ve /iterations?reconstruct_prompts=true = 500.
- Prod log:
gcloud logging read 'resource.type="cloud_run_revision" AND textPayload=~"Response size was too large"' → 500'lerle birebir trace eşleşmesi.
- Fix sonrası: aynı oyun detayda açılmalı; her iki endpoint 200 ve her yanıt < 32 MiB olmalı (büyük oyunda da).
Kaynak: 2026-06-25 canlı prod debug oturumu (Cloud Run logları + Supabase). Kök-neden trace-join + büyüme→eşik ile doğrulandı; silinme/RLS/Supabase-521/asset hipotezleri çürütüldü.
Belirti (somut örnek)
ongame.ai/admin/games/d5ff84a6-7b45-4c54-8bc2-759275a3678b("Swipe & Slay", Erdem) açılınca "Game Not Found — The game session you requested could not be found."Oyun aslında tamamen sağlam: DB'de mevcut,
is_archived=false, oyun listesinde #1, ve admin MCP (get_game_details,get_game_iterations,get_iteration_context) tüm veriyi sorunsuz döndürüyor. Sorun yalnızca web detay sayfasında.Mevcut davranış (kanıtlanmış)
Detay sayfası iki backend endpoint'i çağırıyor, ikisi de 500 dönüyor (prod Cloud Run logları, 12:23→12:48 boyunca sürekli, tek oyuna özgü):
GET /api/admin/games/{id}/detailsGET /api/admin/games/{id}/iterations?reconstruct_prompts=trueFrontend (
GameDetailClient) bu 500'leri alınca "Game Not Found" basıyor.Kök-neden: Cloud Run 32 MiB yanıt limiti
App yanıtı üretiyor (uvicorn access logu 200) ama Cloud Run egress'te kesip istemciye 500 döndürüyor. Kanıt:
run.googleapis.com/varlog/system):WARNING: Response size was too large. Please consider reducing response size.— platform kaynaklı, app değil./detailsson başarılı 200 = 30,240,481 byte (~28.8 MB), ardından kalıcı 500 (32 MiB = 33.5 MB eşiği)./details=47 KB,/iterations=443 KB → 200, sorunsuz.Payload'u şişiren: bu oyunun 244 iteration_snapshot'ı (≈22 MB ham metin)
reconstruct_prompts=trueile her iterasyon için prompt'a genişletiliyor → toplam 32 MB'ı aşıyor. Mekanizma: yanıt boyutu iterasyon sayısıyla sınırsız büyüyor, limit ise sabit 32 MB. Dolayısıyla bu tek oyuna özgü bir kaza değil — yeterince iterasyon biriken her oyun aynı eşiği geçecektir (yalnız Swipe & Slay'de doğrulandı; genel risk mekanizmadan çıkıyor).Etki
Admin, yeterince büyük/uzun oyunların detay sayfasını hiç açamıyor (debug/gözlem körlüğü); oyun büyüdükçe kalıcılaşıyor. User-facing değil (yalnız admin paneli). Veri kaybı yok.
Kapsam dışı bırakılanlar (yanlış teşhis tuzakları)
Veri silinmesi/arşiv DEĞİL · RLS/JWT DEĞİL · Supabase 521 (12:23'teki anlık blip) DEĞİL · yüklenen asset DEĞİL (oyunun 55 image asset'i URL olarak ~2 MB, prompt'a gömülmüyor; mesaj/snapshot'larda 0 base64).
Önerilen yön (en dar fix)
/iterationsve/detailspayload'unu sınırla — yanıtın iterasyon sayısıyla sınırsız büyümesini engelle:/iterations'ı paginate et (sayfa başına N iterasyon), ve/veyareconstruct_prompts'u lazy yap — prompt'u yalnız kullanıcı bir iterasyonu açtığında, tek iterasyon için kur (zatenget_iteration_contextper-iter çalışıyor)./details'i de büyük alt-koleksiyonları (tüm iterasyon/mesaj içeriği) inline göndermeyecek şekilde kırp/paginate.Hedef: tek HTTP yanıtının 32 MiB'ı asla aşmaması.
Nasıl doğrulanır
d5ff84a6-7b45-4c54-8bc2-759275a3678b) admin detayda aç → "Game Not Found"; DevTools'ta/detailsve/iterations?reconstruct_prompts=true= 500.gcloud logging read 'resource.type="cloud_run_revision" AND textPayload=~"Response size was too large"'→ 500'lerle birebir trace eşleşmesi.Kaynak: 2026-06-25 canlı prod debug oturumu (Cloud Run logları + Supabase). Kök-neden trace-join + büyüme→eşik ile doğrulandı; silinme/RLS/Supabase-521/asset hipotezleri çürütüldü.