Perangkat lunak dibuat di antara commit
(zed.dev)- DeltaDB adalah bentuk baru sistem kontrol versi yang mengelola versi percakapan dengan agen dan worktree yang diedit agen secara bersamaan
- Git disusun berpusat pada commit individual dan tidak dirancang untuk menangani percakapan yang berlanjut serta perubahan kode yang terus berlangsung secara bersamaan
- DeltaDB merekam bukan hanya commit, tetapi semua operasi yang terjadi selama pekerjaan sebagai aliran delta yang terperinci, dan memberi setiap delta pengenal yang stabil
- Pesan dan edit yang dihasilkan oleh pesan tersebut dicatat berdampingan, dan banyak orang serta agen dapat mengedit file yang sama secara bersamaan di mesin yang berbeda
- Kolaborasi dapat berlangsung lebih langsung di dalam percakapan dan worktree saat kode sedang dibuat, bukan melalui prosedur review setelah commit dan push
Latar belakang dan rumusan masalah
- Tim Zed tidak terbiasa dengan model pull request, dan telah membangun kepercayaan serta pemahaman bersama dengan bekerja bersama di worktree yang sama sambil mendiskusikan kode saat menulisnya
- GitHub baru memungkinkan orang membicarakan kode setelah melakukan commit dan push, tetapi percakapan penting bagi tim Zed biasanya sudah selesai sebelum titik itu
- Zed dimulai pada 2021 untuk melampaui keterbatasan commit, dengan tujuan lebih dulu membuat editor yang layak untuk pengembang terbaik di dunia lalu menghadirkan cara kolaborasi yang lebih baik di dalamnya
- Masalah yang telah lama dipikirkan dalam konteks kolaborasi antarmanusia menjadi makin penting saat berkolaborasi dengan agen
- Percakapan yang menghasilkan kode makin menjadi sumber nyata dari perangkat lunak, dan percakapan itu perlu saling merujuk dengan kode yang terus berkembang dan berubah
- Git disusun berpusat pada commit individual, sehingga tidak dirancang untuk mendukung keterkaitan antara percakapan berkelanjutan dan perubahan kode seperti ini
DeltaDB dan langkah berikutnya
-
Bukan semua commit, melainkan semua operasi
- DeltaDB membagi pekerjaan ke dalam aliran delta yang terperinci, dan berbeda dari Git yang menyimpan snapshot per commit, DeltaDB merekam semua operasi di antara commit
- Setiap delta memiliki pengenal yang stabil, sehingga momen tertentu dalam proses evolusi dapat dirujuk meski kode terus berubah
- Worktree dikontrol versinya sebagai proses perubahan itu sendiri, dan ditangani bersama percakapan yang mendorong perubahan tersebut
- Pesan dan edit yang dihasilkan pesan itu dicatat berdampingan dan tidak terpisahkan satu sama lain
- DeltaDB memiliki replicated worktree bebas konflik bawaan, sehingga banyak orang dan agen dapat mengedit file yang sama secara bersamaan di mesin yang berbeda
- File tetap merupakan file sungguhan, agen bekerja pada file melalui terminal, dan pengguna dapat me-mount seluruh worktree ke disk kapan pun diperlukan untuk memakai alat mereka sendiri
-
Source code kini menjadi source conversation
- Karena referensi ditambatkan ke delta, bukan ke nomor baris, referensi tetap bertahan meski kode bergeser ke bawah
- Dari baris mana pun dalam percakapan lama, kita bisa melompat ke kode pada keadaan saat ini atau ke kode yang ditulis agen pada saat itu
- Dari baris kode mana pun, kita bisa menemukan percakapan yang membuat kode itu dan semua percakapan setelahnya yang menyentuh kode tersebut
- Agen juga dapat memanfaatkan informasi ini untuk mengambil konteks latar belakang dari kode yang sedang disentuhnya
- Agen dapat memanggil agen yang sebelumnya pernah mengerjakan kode itu untuk bertanya mengapa kode tersebut ditulis dengan cara seperti itu
-
Seharusnya tidak perlu commit untuk berkolaborasi
- Tujuannya adalah menjadikan percakapan dengan agen sebagai satu-satunya percakapan yang diperlukan untuk kolaborasi
- Anggota tim dapat ikut serta saat pekerjaan masih berlangsung, berbicara dengan agen yang mengerjakan tugas itu, dan memberi komentar di tengah proses
- Anggota tim tidak perlu menunggu commit dan push terlebih dahulu untuk bisa ikut serta
- Pull request, thread review, dan komentar inline sebelumnya adalah prosedur untuk menempelkan kembali diskusi ke kode karena kode dan pembahasan berada di tempat yang berbeda
- Jika kode dan pembahasan berada di tempat yang sama, prosedur seperti itu akan hilang
- Git dan CI tetap berperan menjalankan pemeriksaan dan menghubungkan ke dunia luar, tanpa menjadi tempat yang memaksa kolaborasi terjadi
-
Langkah berikutnya
- Perangkat lunak kini mulai terbentuk bukan dari commit, melainkan dari percakapan
- DeltaDB adalah sistem kontrol versi untuk hal itu, dan akan tersedia bagi pengguna awal dalam beberapa minggu ke depan
- Jika ingin mencobanya lebih dulu, Anda dapat mendaftar ke daftar tunggu
1 komentar
Opini Hacker News
Hasil kerja di antara commit adalah sup yang berantakan, jadi walaupun dilihat, itu tidak berguna bagi siapa pun. Tulis ulang riwayat dengan
git rebaseagar setiap commit kecil dan atomik, lalu biarkan cerita yang dibentuk oleh commit menjelaskan mengapa hasilnya menjadi seperti sekarangTidak penting bagaimana urutan waktu sebenarnya terjadi. Saya setuju bahwa review pull request datang terlalu terlambat, tetapi masalahnya adalah pull request dirancang untuk meninjau seluruh hasil branch sekaligus sehingga review commit individual menjadi sulit. Solusinya seharusnya bukan membagikan semua noise, melainkan mendorong commit kecil dan atomik agar pekerjaan awal bisa direview sebelum fitur atau perbaikannya selesai
Dalam pengalaman saya, yang pertama lebih umum, mungkin karena GitHub secara alami lebih mendukung cara itu dan squash commit bisa menyelesaikan sebagian masalah pada pendekatan kedua. Kalau harus memilih, menurut saya pendekatan pertama jauh lebih masuk akal
Saya tidak terlalu yakin, tetapi saya rasa agen akan lebih menyukai informasi tambahan, meskipun bagi sebagian orang itu hanyalah noise
Terlalu banyak orang terlalu mudah membuang riwayat demi membuatnya terlihat “rapi”. Itu tidak masuk akal, tetapi anehnya terasa cocok dengan logika khas sebagian programmer
Cara saya adalah commit sesering mungkin, puluhan kali sehari. Commit adalah catatan tentang apa yang terjadi, dan saya ingin sebanyak mungkin catatan itu tetap ada. Sudah berkali-kali
git bisectmenunjuk ke commit kecil satu baris yang tampaknya tidak bermasalah sama sekali, lalu membantu menemukan bug halus yang baru ketahuan jauh belakanganMenurut saya source control memang ada untuk menemukan hal seperti itu. Kalau saya harus menyisir setiap baris dari commit besar, masalah seperti ini akan jauh lebih menyakitkan
Jadi saya benar-benar tidak paham ketika orang sengaja menggabungkan commit menjadi satu sesuai ukuran penuh PR, lalu membuang satu-satunya bagian yang menurut saya benar-benar berguna dari version control. Karena ada banyak juga yang berada di kubu seperti komentar induk, rencana penulis untuk riwayat yang lebih rinci tampaknya akan menjadi perjuangan yang tidak mudah
Kebersihan commit yang baik sulit dipaksakan di tingkat tim, tetapi anehnya di tingkat PR orang cukup kooperatif dalam menulis penjelasan yang baik dan menjaga kelompok perubahan tetap rapi
Ini terdengar seperti auto-commit yang sering dengan tingkat kepercayaan yang lebih rendah terhadap Git. Git sendiri sudah cukup mampu menangani auto-commit yang sering
Jika Anda ingin mempertahankan “percakapan” dari auto-commit pada tiap titik waktu sambil tetap menggulungnya menjadi commit tingkat atas yang lebih “bersih”, Anda bisa sesekali memakai
git merge --no-ffdan lalu memakai alat seperti--first-parentagar fokus pada commit tingkat atas, bukan commit “percakapan”Backend Git sendiri sudah memiliki banyak optimasi DB delta di Git pack dan alat lain, dan sebenarnya yang sedikit perlu dibenahi adalah frontend Git—terutama
--first-parent—serta banyak UI Git yang “mengutamakan/khusus peta jalur kereta”. Banyak orang menganggap peta jalur itu jelek, membingungkan, dan tidak menyenangkan, jadi perlu lebih banyak UI drill-down yang sesuai dengan--first-parentgit blamejuga bisa diatur agar memakai--first-parentSaya setuju dengan “software dibuat di antara commit”, tetapi tidak setuju dengan “DeltaDB menangkap semua pekerjaan di antara tiap commit”
Pertama, itu terasa intrusif. Saya juga tidak ingin perekam layar yang berjalan 24 jam saat saya bekerja. Bukan berarti salah kalau kesalahan saya terlihat, tetapi jika saya bekerja dengan benar, nilai yang saya hasilkan tercermin dalam commit, dan cara itu terasa jauh kurang intrusif
Kedua, saya memakai banyak alat, dan saya tidak ingin menyatukan semuanya ke dalam DB aneh semacam itu. Jika pada titik tertentu hasilnya hanya “sebuah proses eksternal melakukan sesuatu”, lalu apa gunanya menangkap semuanya? Bagus bahwa Zed bisa mengintegrasikan banyak hal, tetapi itu tidak berarti saya akan memakai semua yang terintegrasi di Zed. Terakhir kali saya cek, saat memakai Claude Code lewat ACP di Zed, saya bahkan tidak bisa memundurkan pesan lama untuk mengeditnya
Terakhir, secara pribadi saya rasa kita sudah kehilangan esensi commit. Kebanyakan orang membuat kumpulan perubahan acak yang tidak terbatas lalu menjalankan
git commit, kumpulan perubahan itu direview sebagai satu bongkahan besar, lalu commit-commitnya digabung. Ini memang bukan akhir dunia, tetapi commit yang benar-benar dipahat dengan tangan itu luar biasa bagus. Kalau Anda menjalankangit blamepada proyek yang memaksa cara seperti itu, Anda akan langsung paham maksud sayaHal seperti DeltaDB hanya akan makin memperkuat dan membakukan kebiasaan menggabungkan commit secara asal. Kalau Anda penasaran apa yang sebenarnya terjadi, sekarang Anda tinggal memutar ulang secara voyeuristik percakapan pengguna dengan LLM
Poin terakhir itu menarik, tetapi juga menjengkelkan. Saya tidak berhasil meyakinkan rekan tim untuk mendokumentasikan perubahan dan motivasinya hanya karena itu praktik rekayasa yang baik dan membantu tim, tetapi semua orang justru dengan senang hati menjelaskannya kepada LLM. Sebagian besar karena LLM membutuhkannya agar bisa bekerja, tetapi menarik melihat seberapa banyak hal yang dulu tidak akan dilakukan orang kini dilakukan demi memuaskan LLM. Tiba-tiba hal-hal yang anehnya dulu tidak terdokumentasi sekarang didokumentasikan di CLAUDE.md
Kode yang ditulis di antara commit adalah proses berpikirku. Aku berpikir dengan menulis kode, menghapusnya, lalu menulisnya lagi
Kode yang dibawa keluar lewat commit ditulis agar bisa dipahami orang lain, dan merupakan hasil dari proses yang ditulis untuk membantu berpikir. Aku tidak ingin pikiranku diserialisasi, dikelola versinya, lalu bisa diakses publik
https://www.nature.com/articles/s44222-025-00323-4
Aku juga tidak yakin semua status perantara di antara commit itu relevan atau berguna. Tapi rasanya aku termasuk minoritas
Kalau di-squash, yang tersisa sebagai konteks hanya 400 baris kode yang kamu tulis “sekaligus” dan feature request tempat kode itu ditugaskan. Sama sekali tidak membantu
Orang terburuk yang pernah kutemui menulis modul baru dan tidak check-in apa pun sampai cukup berjalan. Sepertinya ini juga berkaitan dengan ego rapuh yang diam-diam memperbaiki bug di kodenya sendiri tanpa mengatakannya lebih dulu. Dia menulis kode rumit yang menunjukkan hukum Kernighan, padahal untuk melakukan hal seperti itu dia butuh pengalaman 10 tahun lagi. Dia membanggakan bahwa kodenya “powerful”, padahal itu bukan pujian, melainkan firasat buruk. Aku berkali-kali menemukan bug di kode commit awalnya. Rasanya cuma ingin memohon: tolong tinggalkan jejak apa pun
Kamu tidak perlu mengaku kalau kamu asal mencoba apa saja sampai menemukan masalahnya. Setelah tahu bahwa titik B bisa dicapai, cukup susun cerita yang diinginkan dari A ke B. Susun ulang commit seperti cara kamu akan menulisnya jika dari awal sudah tahu persis apa yang harus dilakukan. Buang saja 90% kode yang kamu tulis lalu langsung hapus, atau apa pun yang tidak mendukung narasi itu
Dalam penegakan hukum ada yang disebut parallel construction. Kamu bisa tahu seorang tersangka bersalah lewat fakta yang tidak dapat diterima di pengadilan, tetapi fakta yang sama harus ditemukan lagi melalui prosedur yang benar. Misalnya mengamankan sampah pada hari pengambilan, mewawancarai tetangga, mengumpulkan cukup bukti tidak langsung untuk mendapatkan surat perintah penggeledahan, lalu menemukan kembali bukti tersebut
Tapi aku skeptis karena rasanya bukankah cukup membuat file teks dan menambahkan referensi commit? Aku juga tidak paham kenapa tidak pakai Fossil. Karena itu database SQLite, kamu sudah bisa membundel hal-hal yang diinginkan, dan ada berbagai fitur bawaan untuk mereferensikan commit
Aku sempat berpikir ingin mencoba Zed karena katanya sekarang ada keymap emacs, tapi sekarang tidak jadi. Ini fitur yang terlalu invasif dan mengerikan, dan aku sama sekali tidak mau rekan kerja meninjau semua edit perantara hingga commit yang kubuka untuk review, sampai ke tingkat penekanan tombol
Sebelum membuka PR, kadang aku merapikan sedikit riwayat commit di magit agar lebih linear dan mudah dicerna. Misalnya memperbaiki penjelasan atau menggabungkan commit yang berdekatan. Tapi fitur ini membuang satu sisi dari pekerjaan itu sepenuhnya, lalu berkata, “Wahai rekan kerja, telan saja selang pemadam berupa delta ini dan nikmatilah”
Kalimat “Yang benar-benar kami inginkan itu sederhana. Percakapan dengan agen menjadi satu-satunya percakapan yang Anda perlukan” itu sebenarnya maksudnya apa. Tidak, salah
Perasaan bahwa Anthropic atau OpenAI akan mengakuisisi Zed terasa tak terhindarkan, dan itu membuatku muak. Idenya terlalu bagus dan perangkat lunaknya juga terlalu bagus
Ada sangat banyak startup tahap awal yang bersaing di bidang ini sekarang. Dalam beberapa minggu terakhir saat wawancara, aku sudah bicara setidaknya dengan dua perusahaan seperti ini
Persaingan akan sangat ketat jika alat-alat seperti ini ingin benar-benar menemukan pijakan hingga sukses dalam skala besar. Tapi aku tetap tidak bisa menepis kesan bahwa semua ini tampaknya memungkinkan pengawasan pengembang pada tingkat yang membuatku sangat tidak nyaman
Commit berguna karena sudah lebih dulu dirapikan. Coba-coba dan salah di antaranya adalah tempat untuk mencoba sesuatu lalu menghapus jalan buntu, dan sebagian besar memang harus dibuang
Menyimpan semua perubahan dan pesan agen hanya akan membuat sampah itu tetap ada
Google mungkin sudah melakukan ini sejak sekitar 10 tahun lalu dengan citc. Aku tidak tahu kapan tepatnya Gemini akan benar-benar memanfaatkannya, tetapi Google pada dasarnya sudah memiliki hampir seluruh riwayat hampir semua pengembang pada tingkat Ctrl-S setidaknya selama 10 tahun
Jika Gemini sekarang terlihat bodoh, itu hanya karena mereka menghemat alokasi sumber daya komputasi
0 - https://en.wikipedia.org/wiki/Piper_(source_control_system)
Di sini saya tidak paham apa proposisi nilainya. Saya sudah melihat beberapa perusahaan menawarkan fungsi yang kurang lebih seperti ini, tetapi tidak satu pun yang memberikan alasan yang benar-benar meyakinkan mengapa teknologi ini perlu ada.
Perusahaan kami sepenuhnya remote, dan sebagian besar rekan kerja saya tidak tinggal di dekat saya. Kami melakukan video chat beberapa kali sehari, tetapi sebagian besar berkomunikasi lewat Slack
Kami juga termasuk cukup di depan dalam kurva adopsi agen LLM untuk menulis kode yang baik. Berkat model yang bagus dan pagar pengaman yang sangat baik dari coding harness tertentu, akhir-akhir ini LLM menulis sebagian besar kode kami
Biasanya satu hari dimulai dengan mengambil sebuah tiket, mengarahkannya ke LLM, lalu mulai menyelesaikan masalah bersama. Kami membuat keputusan arsitektur, menyusun rencana, dan mengeksekusinya. Fitur terakhir yang saya deploy menelan biaya token sebesar 19 dolar, dan saat sedang sibuk LLM terus bekerja sekitar 30 menit tanpa input dari saya
Hanya ketika saya tidak yakin arah mana yang lebih baik, saya mungkin mengajukan pertanyaan di chat tim untuk meminta pendapat rekan kerja. Tetapi banyak tiket diselesaikan sepenuhnya secara otonom
Setelah itu saya membuka PR dan memposting tautan PR di Slack untuk meminta review, dan saat itulah rekan kerja pertama kali melihat implementasinya. Kadang rekan kerja punya pertanyaan. Untuk percakapan cepat secara real-time, komentar GitHub kurang cocok, jadi mereka sering mengajukan pertanyaan di thread Slack alih-alih di komentar PR
Jawaban atas pertanyaan-pertanyaan itu ada di log chat saya dengan LLM di laptop saya, tetapi tidak ada cara mudah untuk menunjukkannya kepada rekan kerja. Jadi saya akhirnya memainkan telepon rusak dengan menyalin pertanyaan rekan kerja dari Slack ke chat LLM, lalu menempelkan kembali jawabannya
Gagasan bahwa rekan kerja, LLM, dan saya bisa lebih mudah ikut serta dalam percakapan yang sama sangat menarik
Ini bukan berarti tim Zed pasti menuju arah yang benar, dan mungkin tim kami akan lebih baik jika bekerja dengan cara lain. Tetapi pendekatan saat ini terlalu “berhasil”, jadi hampir tidak ada tekanan organisasi untuk mengubahnya
Pekerjaan tim software adalah secara kolaboratif mempelajari model yang bekerja efektif dalam suatu domain. Lalu mengekspresikan model dan pembelajaran itu dalam kode, tes, dan dokumentasi terkait
Jadi di satu sisi saya sepenuhnya setuju bahwa pull request dan code review secara fatal merusak proses ini, tetapi saya juga langsung merasa ngeri dengan gagasan membuat prosedur dan artefak tambahan lain yang hanya akan mengalihkan perhatian kita. Semua ini seharusnya muncul di codebase
Bukan sesuatu yang terpisah. Bukan juga kumpulan commit message atau ADR. Jika codebase tidak bisa sepenuhnya menjelaskan sendiri apa dan mengapa, baik kepada manusia maupun AI, maka itu berarti gagal, dan kita akan menghabiskan sisa hidup membuat lebih banyak prosedur untuk mengelola kegagalan itu
Status kode saat ini saja tidak cukup untuk pengembangan software modern