MWSE/REVIEW.md

2.9 KiB
Raw Permalink Blame History

REVIEW.md — İnsan Onayı Gereken Konular

Bu maddeler go-rewrite branch'inde uygulandı ama CLAUDE.md gereği KAPATILMADI / merge edilmedi / deploy edilmedi. İnceleyip karar ver.

1. Concurrency modeli (#22) — ASIL KRİTİK TASARIM

Uygulanan: RWMutex + bağlantı-başına-tek-yazıcı goroutine (decisions.md #3, PORT-PROGRESS.md).

İncelenecek: Bu, izin verilen iki yoldan biri. Diğeri "per-room owner-goroutine (actor) + channel". Ben okunabilirlik gerekçesiyle RWMutex'i seçtim ve gerçek race'i tek-yazıcı + done-seçimli Send ile çözdüm. TestLeaveWhileSendRace -race ile temiz.

Karar gereken: Actor modeli mi istiyorsun, yoksa bu yeterli mi? (Önerim: bu yeterli ve daha sade. Aktör'e geçmek büyük yeniden yazım; bu tasarım 1.0.0 yük profillerinde de ölçeklenir.)

2. P2P request/response zinciri (#23/#24) — ÇÖZÜLDÜ (#33)

Önceki sorun: SDK request'i action 'R' ile gönderdiğinden sunucu anında [null, id, 'E'] yanıtlıyordu; eşin asıl cevabı response/to ile sonra geliyordu ama o id SDK tarafında zaten silinmiş oluyordu (cevap kayboluyordu / mwse.request patlıyordu).

Çözüm (#33): Dispatcher artık handler nil döndürdüğünde yanıt göndermiyor (nil = "ben yanıt vermeyeceğim / cevap out-of-band gelecek"). request/to nil döndürür → erken [null,id,'E'] yok → asıl cevap response/to ile aynı id üzerinden gelir. SDK tarafında WOM yolu EventPool.only() ile request()'ten ayrıldı. Bu, donmuş sözleşmenin şekillerini değiştirmez; yalnızca SDK'nın kullanamadığı sahte bir null-E frame'ini kaldırır. Regression: TestServerNoReplyOnNilResult, TestRequestResponseRoundTrip.

3. /api kontrol düzlemi — ertelenen uçlar

Uygulandı: POST /api/auth/key, GET /api/rooms, GET /api/clients, GET /api/room/{id}, POST /api/room/create, POST /api/client/{id}/send, POST /api/room/{id}/send.

Ertelendi: POST /api/room/{id}/join, DELETE /api/room/{id}/leave (sunucunun odaya "sahte client" olarak katılması — Go'da gerçek bir sink-Client ile tasarlanmalı), POST /api/webhook. Bunlar 0.1.0 çekirdeği için kritik değil.

4. Tel sözleşmesi: latent davranışlar

decisions.md'deki bug düzeltmeleri mantık seviyesinde; gönderilen mesaj isim/şekilleri korundu. Yine de pairing/davet akışları artık Node'da hiç çalışmayan haliyle değil, doğru çalışıyor. Eğer canlıdaki bir istemci bu bozuk davranışa bağımlıysa (pek olası değil) fark oluşabilir. Frontend SDK'nın beklediği yüklerle uyumlu yazıldı.

5. Eski Node kaynağı

Source/ ve kök index.js/package.json referans olarak duruyor. Go portu bunların yerini alıyor. Silme/temizleme senin kararın (ben dokunmadım).

Deploy / merge

stable'a merge ve ws.saqut.com deploy'u bilinçli olarak yapılmadı. Push'u da sana bıraktım (git push origin go-rewrite).