Birlikte

Canlı iş birliği

Scellis yerel-önceliklidir: Doğruluğun kaynağı cihazınızdır ve bir iş akışını kurmanın ya da çalıştırmanın hiçbir adımı sunucu gerektirmez. İş birliği bu çekirdeğin yerine değil, üzerine gelir — iş akışı tuvalinde Figma tarzı çok oyunculu düzenleme, tüm ekibin izleyebildiği canlı çalıştırmalar, doğrudan grafa iliştirilmiş yorum dizileri. İki özellik baştan sona geçerlidir; bu sayfa aslında onları anlatır. İş birliği kesinlikle ekleme niteliğindedir: Yalnız çalışmak asla yavaşlamaz, asla kırılganlaşmaz. Ve paylaştığınız şey bir taslaktır — atıf yaptığınız şey bir commit'tir.

Katmana kadar inen mevcudiyet#

Paylaşılan bir oturumu açtığınızda diğerlerini iş başında görürsünüz: tuval üzerinde gezinen canlı imleçler, tuttukları seçimler, her birinin baktığı görünüm alanı. Mevcudiyet bilinçli olarak geçicidir — imleçler ve seçimler asla kalıcılaştırılmaz ve asla hash'lenmez; yani birini izlemek eserde iz bırakmaz. Ve en üstteki grafta da durmaz.

Bir model, bir düğümün içindeki graftır; bu yüzden tuvaldeki bir model düğümü toplulaştırılmış bir rozet gösterir — “içeride 3 kişi düzenliyor” — ve Model View'a adım attığınızda bu rozet katman başına imleçlere çözülür. Yalnızca kimin belgede olduğunu değil, kimin hangi modelin hangi katmanında çalıştığını da görürsünüz. Fırça ve üzerine-gelme vurguları eş başına ve anlıktır; oturuma aittir, kaydedilen grafa değil.

Her düzenleme önce doğrulanır, sonra sıraya girer#

Bir iş akışı bir çizim değildir — tipli, çalıştırılabilir bir graftır ve çalıştırılabilir bir grafın yalnızca yakınsamaya değil, geçerliliğe ihtiyacı vardır. Scellis bu yüzden bir belge CRDT'si yerine sunucu-yetkili-artı-rebase modeli kullanır: Bir CRDT herkesin sonunda aynı baytlara sahip olmasını garanti eder — ama o baytların çalıştırılabilir bir program oluşturduğunu değil. Bu nedenle canlı oturumdaki her düzenleme, sıraya alınıp yayınlanmadan önce sunucu tarafında doğrulanır: Hedef hâlâ var, yeni bağlantı döngü oluşturmuyor, tipler tutuyor. Düzenleme paylaşılan sıraya ancak bundan sonra girer.

Kendi istemciniz bu gidiş-dönüşü asla beklemez. Düzenlemenizi iyimser biçimde uygular, sıralanmış geçmiş farklı düşerse rebase eder — tuval elinizin altında anlık kalırken, paylaşılan belgenin gerçekte ne olduğunun tek hakemi sunucu olarak kalır.

düzenlemeniztuvalde anında görünürdenetlenirsıraya konurherkessıra farklıysa üstüne yeniden uygulanır
Şek. 1 — Tuvaliniz asla beklemez. Bir düzenleme ekranınıza anında düşer, sunucuda denetlenip sıraya konur ve herkese o sırayla ulaşır — paylaşılan sıra farklı çıktıysa da düzenlemeniz kaybolmaz, onun üstüne yeniden uygulanır.

Geri alma, kimin yaptığına saygı duyar#

Canlı oturumda Cmd+Z sizin son düzenlemenizi geri çevirir — asla bir başkasınınkini değil. Geri alma katılımcı başınadır: Kimsenin geri alması masanın karşısına uzanmaz ve bir çalışma arkadaşınız sizin yapmadığınız işi sessizce geri saramaz.

Paylaşılan çalıştırmalar: çalıştırmanın kendisi de çok oyunculu#

Birlikte düzenlemek hikâyenin yarısıdır. Oturumdaki biri bir çalıştırma başlattığında, çalıştırma canlı yayınlanır: yaşam döngüsü, nokta nokta dolan kayıp ve doğruluk eğrileri, geldikçe çıktı farkları. Oturumdaki herkes hesaplamanın oluşunu izler — “GPU için Google Docs” — yalnızca çevresindeki düzenlemeleri değil. Aynı canlı telemetri, bir eğitim çalıştırmasını da dağıtık bir taramayı da aynı şekilde besler.

Çalıştırma kontrolü Grant rolünü izler. Paylaşılan bir çalıştırmayı yalnızca düzenleyiciler başlatabilir, duraklatabilir ya da iptal edebilir; izleyiciler ve yorumcular, devre dışı kontrollerle ve belirtilmiş bir gerekçeyle izler. Donmuş bir eğri asla canlı gibi okunmaz: Çalıştırıcı bir kalp atışı yayar; koptuğunda akış buna göre işaretlenir — duran bir grafik ilerleme taklidi yapamaz.

Sonradan katılan tam resmi alır. Bir oturum bağlantısı, yeni katılana belgenin anlık görüntüsünü, düzenlemelerin tekrarını ve güncel mevcudiyeti verir — bir çalıştırma canlıysa metrik akışını da t = 0'dan itibaren. Yeni gelen, kayıp eğrisinin tamamını görür; yalnızca kendisinden sonra gelen ucunu değil. O çalıştırmayı cihazlar arasında havuzlamak ayrı bir adımdır — konusu dağıtık hesaplama.

Notlar, yorumlar ve mention'lar#

Tartışma, işin yaşadığı yerde yaşar. Bir Not markdown'dır; bir düğüme, bir kenara, tuvalin bir bölgesine ya da belgenin bütününe mantıksal olarak çapalanır — asla piksel koordinatlarına değil. Yorum dizileri yanıtlar ve bir çözüldü işareti taşır; yazıldıkça herkes için canlı belirir. Belgede Grant sahibi olan herkese @mention atabilirsiniz; her mention, kişiye — çevrimiçi olsun olmasın — ulaşan bir bildirim üretir.

Çapalar kırılgan değil dayanıklıdır. Bir notun işaret ettiği düğüm silinirse not onunla birlikte kaybolmaz — yönlendirmeli yeniden iliştirme akışı olan ayrık bir iğneye dönüşür. Yazı bir düzenlemeye asla kurban gitmez. Not gövdeleri içerik hash'inin dışında kalır: Bir iş akışına not düşmek kimliğini değiştirmez — çokça tartışılmış bir eser, hiç tartışılmamışıyla aynı hash'i verir ve yeniden üretilebilirliği çevresindeki konuşmadan etkilenmez.

Grant'ler: belirli kişiler, açık roller#

Paylaşım bir Grant ile olur: Belirli bir kişiyi izleyici, yorumcu ya da düzenleyici olarak davet edersiniz — isterseniz bir son geçerlilik tarihiyle. Bir Grant, canlı bir oturumu yöneten kişiye özel yetkidir; daha geniş paylaşım grafına — görünürlük kafesleri, paylaşım bağlantıları, çalışma alanları — nasıl oturduğu ise çalışma alanları ve depolar sayfasının konusudur.

RolCanlı oturumda
İzleyiciTuvali, mevcudiyeti ve paylaşılan çalıştırmayı canlı izler — çalıştırma kontrolleri devre dışıdır, gerekçesi belirtilir.
Yorumcuİzleyicinin gördüğü her şey; artı notlar, yorum dizileri ve mention'lar.
DüzenleyiciTam ortak düzenleme; artı çalıştırma kontrolü — başlatma, duraklatma, iptal.

Bir Grant'in iptali ileriye dönük anında etkilidir — o andan itibaren bir sonraki düzenleme, bir sonraki eşitleme, bir sonraki çalıştırma olayı iptal edilen cihaza artık akmaz. Dürüst sınır hemen yanında durur: Bir cihazın zaten eşitlediği baytlar geri çağrılamaz. İptal geleceği denetler, geçmişi değil — ve Scellis aksini iddia etmez.

Yapısı gereği eklemeli: asla engellenmez, asla kaybolmaz#

Tüm bunları dürüst tutan kural: İş birliği kesinlikle ekleme niteliğindedir — çevrimdışı-öncelikli çekirdeğin üzerindeki bir dekoratördür, ona bir bağımlılık değil. Yalnız çalışan biri için sunucunun kesilmesi gerçek bir yok-işlemdir — hiçbir kısıt olmadan kurar, çalıştırır ve commit edersiniz; çünkü bu yolların hiçbiri hiçbir zaman bir koordinatöre bağlı olmadı. Çok katılımcılı bir oturumda ise koordinatörün kaybı sıralamayı zarifçe askıya alır: Herkes tam yerel kalıcılığı korur, düzenlemeye devam eder ve yeniden bağlanınca rebase eder. Sizinle kendi belgeniz arasına asla bir bekleme çarkı girmez; iş asla kaybolmaz.

Çevrimdışı da aynı disipline uyar. Çevrimdışı yapılan düzenlemeler yerelde kuyruğa girer ve yeniden bağlanınca uzlaştırılır. Kolay çakışmalar kendiliğinden çözülür — kimin değişikliğinin nereye oturduğu görünür kalır. Sert yapısal ayrışma, açık bir üç yönlü birleştirme akışına yükseltilir — asla sessiz bir son-yazan-kazanır olmaz. Sizin yokluğunuzda hedefi ortadan kalkmış bir düzenleme ise sessizce atılmak yerine, yönlendirmeli yeniden bağlamayla öksüz düzenlemeler tepsisine düşer.

Taslak ile commit#

Bütün model tek bir net çizgiye dayanır. Canlı oturum bir taslaktır: akışkan, çok oyunculu, geçici — ve asla hash'lenmez. Commit ise dondurulmuş, içerik adresli bir sürümdür — ve yalnızca commit alıntılanabilir, URL ile yeniden üretilebilir ve üzerine güvenle inşa edilebilir. Bir meslektaşınızı, bir makaleyi ya da gelecekteki kendinizi tam bir sonuca yönlendirmeniz gerektiğinde, oturumu değil, commit'leyip anlık görüntüyü paylaşırsınız.

canlı bir oturum · bir taslaksizadakimhenüz kalıcı bir ad yokcommitsürüm 7sha256:9f3c…bir makalenin atıf yaptığı şey budur
Şek. 2 — Taslak üzerinde birlikte çalışırsınız; atıfı commit'e yaparsınız. Canlı bir oturumdaki hiçbir şeyin kalıcı bir adı yoktur — işe sürümü ve hash'i veren şey commit'tir; böylece ona giden bir bağlantı yıllar sonra bile tam olarak o baytları açar.

Not

Taslak üzerinde birlikte çalışırsınız; atıfı commit'e yaparsınız. Yalnızca commit edilmiş bir sürüm içerik-adreslidir — ve alıntılanabilir, URL ile yeniden üretilebilir olan yalnızca odur.