
Bốn bản phát hành trong 26 tiếng: đi ống cho cài đặt ngôn ngữ và một "bridge release"
GeekBye v1.7.6 đến v1.8.1: một cài đặt ngôn ngữ chưa từng rời khỏi chiếc laptop, một overlay Cmd+/ hiển thị đúng keybinding thật của bạn, một phiên bản không đổi một dòng code nào — và bài toán con gà quả trứng khi di trú feed tự cập nhật.
Giữa một sáng thứ Năm và một chiều thứ Sáu của tháng Hai 2026, GeekBye xuất xưởng bốn bản phát hành: v1.7.6, v1.7.7, v1.8.0 và v1.8.1 — 16 commit, khoảng 26 tiếng giữa tag đầu tiên và tag cuối cùng. Không bản nào trong số đó đáng lên tít. Nhưng gộp lại, chúng là bức chân dung về những gì các tuần phát-hành-nhỏ thực sự chứa đựng: một tính năng cuối cùng cũng đi hết hành trình, một overlay nâng chất lượng sống, một con số phiên bản không có dòng code nào bên trong, và một mảnh kỹ thuật phát hành thực sự đáng học.
Thứ ngôn ngữ chưa từng rời khỏi chiếc laptop
GeekBye có cài đặt ngôn ngữ transcript từ tháng Chín 2025. Nó hoạt động — ở cục bộ. Chọn tiếng Tây Ban Nha và đường ống speech-to-text trên máy sẽ cần mẫn phiên âm tiếng Tây Ban Nha. Nhưng grep codebase v1.7.5 tìm cài đặt đó, bạn thấy nó ở đúng ba nơi: audio handler, Settings UI, và settings hook. Không có trong API client. Không có trong session tracker. Suốt bốn tháng, mọi request rời khỏi chiếc máy đều mù ngôn ngữ: bản ghi phiên ở backend không hề biết mình đại diện cho ngôn ngữ nào, và AI chat nhận các transcript tiếng Tây Ban Nha mà không có lấy một gợi ý rằng chúng là tiếng Tây Ban Nha.
v1.7.6 là bản phát hành nơi cài đặt này đi hết hành trình — hai commit, một ngày. Cú khởi động phiên audio giờ mang theo transcriptLanguage trong payload, và request stream-chat của AI cũng có thêm đúng trường đó, được luồn qua một helper nhỏ: nó đọc cài đặt và cố ý trả về undefined khi giá trị là auto hoặc chưa được đặt, để các backend cũ xuống cấp êm ái thay vì nghẹn một trường chúng không biết. Trong diff còn ẩn một bản sửa thưởng kèm lặng lẽ: để truyền được ngôn ngữ, việc khởi động phiên phải dời ra sau bước phân giải ngôn ngữ — mà theo cách chúng tôi đọc, điều này cũng khép luôn một nhánh lỗi nơi một phiên có thể đã được khởi động (và bị tính vào hạn mức) rồi thành mồ côi khi bước phân giải ngôn ngữ thất bại ngay sau đó.
Bài học khái quát được: một cài đặt không được coi là đã ship khi nó có UI và có tác dụng. Nó được coi là đã ship khi nó chạm tới mọi nơi tiêu thụ đáng lẽ phải biết về nó. Cài đặt của chúng tôi dừng lại ở biên giới mạng suốt bốn tháng, và không ai để ý, vì hành vi cục bộ — hành vi nhìn thấy được — luôn đúng trong suốt thời gian đó. (Nói cho rõ, đây mới là bước đầu thô sơ của việc xử lý ngôn ngữ; dạy AI thực sự trả lời bằng ngôn ngữ của cuộc hội thoại là một chương muộn hơn nhiều của câu chuyện này.)
Cmd+/ — một overlay không nói dối về keybinding của bạn
Tính năng hướng người dùng của v1.8.0 là một overlay phím tắt trên Cmd+/ — 193 dòng component mới, và một quyết định thiết kế đáng học lỏm: nó không render một tấm cheat sheet hardcode. Nó lấy cấu hình phím tắt đang sống và render customKeys || defaultKeys, nên người dùng đã remap phím sẽ thấy phím của họ. Một overlay phím tắt hiển thị giá trị mặc định cho người đã đổi chúng không phải là tài liệu; nó là thông tin sai với typography đẹp đẽ.
Phần còn lại là những nét chỉnh nhỏ cho đúng đắn: overlay tự đặt mình bên trái hoặc phải thẻ ứng dụng tùy phía nào của màn hình còn chỗ, và đóng lại khi bấm Escape, bấm Cmd+/ lần nữa, hoặc click ra ngoài. Bản thân Cmd+/ cũng gia nhập cùng hệ thống preset có thể remap như mọi phím tắt khác — điều này quan trọng, vì Cmd+/ là "toggle comment" trong hầu hết các editor, và một công cụ dành cho developer không nên chiếm chỗ một phím của editor mà bạn không thể dời đi.
Bridge release
Phần kỹ thuật thú vị diễn ra trong những con số phiên bản chẳng ai buồn nhìn lần hai. v1.8.0 còn di trú các release của dự án sang một GitHub organization mới — bề ngoài chỉ là dọn dẹp org, ngoại trừ một đặc tính của auto-update trên desktop: URL của feed được nướng vào binary. Mọi bản cài v1.8.0 poll các release của organization mới. Còn mọi bản cài ngoài kia — toàn bộ là v1.7.7 trở xuống — poll cái cũ, mãi mãi, trừ khi có thứ gì đó xuất hiện ở đấy.
Đó chính là con gà quả trứng: publish bản phát hành tiếp theo chỉ lên repo mới, thì toàn bộ đội quân client hiện có sẽ không bao giờ thấy nó. Mười sáu phút sau tag v1.8.0, một cờ mới đáp xuống script phát hành: --publish-owner, thứ viết lại nơi electron-builder upload các artifact sau khi build — như dòng comment trong code viết rõ, "không ảnh hưởng đến code ứng dụng đã biên dịch". Toàn bộ mánh chỉ có vậy, và đó chính xác là đường nối đúng: feed nướng trong binary và đích upload của artifact là hai quyết định khác nhau, và một cuộc di trú cần chúng được tách rời trong đúng một bản phát hành. Build v1.8.1 trỏ vào feed mới, upload nó lên repo cũ; các client cũ thấy bản cập nhật ở đó, cài nó, và tỉnh dậy poll organization mới. Commit message gọi đây là một "bridge release" (bản phát hành bắc cầu), và đó là cái tên đúng. v1.8.1 được tag 2 tiếng 20 phút sau v1.8.0. (Về câu chuyện khởi nguồn vì sao dự án này đối xử với auto-update bằng sự kính trọng sát ranh giới nỗi sợ, xem bản tự cập nhật đã khiến ứng dụng của chúng tôi không thể bị giết.)
Còn v1.7.7? Một commit. Chính cú nâng phiên bản. Không bản sửa, không revert, không lời giải thích nào trong lịch sử — cách đọc hợp lý nhất của chúng tôi là một lần publish cần chạy lại, và chúng tôi thà thừa nhận điều đó còn hơn bịa ra một câu chuyện. Đôi khi một con số phiên bản tồn tại vì phát hành phần mềm là một quy trình đời thực với những cú vấp đời thực, chứ không phải một hàm thuần của cây mã nguồn. Còn vì sao 1.7 lại thành 1.8: không commit nào nói, nhưng cuộc di trú feed chính là ranh giới tương thích có ý nghĩa — mọi binary 1.8.x nhìn vào một organization khác với mọi binary 1.7.x — và điều đó xứng đáng một cú nâng minor hơn bất kỳ tính năng nào.
Ba điều tuần này dạy chúng tôi
- Truy vết một cài đặt tới mọi nơi tiêu thụ. Tùy chọn ngôn ngữ đã "xong" suốt bốn tháng trong khi backend vẫn mù. Chính việc hành vi cục bộ nhìn thấy được luôn đúng là thứ cho phép khoảng trống này sống sót — câu hỏi audit là "còn ai nữa nên biết giá trị này?", đặt ra ở mọi ranh giới.
- Render config đang sống, đừng render tài liệu. Overlay phím tắt đọc cùng một nguồn sự thật mà hệ thống phím tắt sử dụng. Bất cứ cách nào khác cũng bắt đầu lệch từ lần đầu tiên người dùng tùy chỉnh.
- Một cuộc di trú feed cần một bản phát hành sống trong cả hai thế giới. Feed mới trong binary, repo cũ cho upload. Nếu công cụ phát hành của bạn không tách được hai đích đó, hãy thêm cái cờ trước khi bạn cần nó — cờ của chúng tôi đến 16 phút sau khi được cần, cũng đủ sát để tính là kịp.
Về chương trước trong câu chuyện v1, xem trang login CHÍNH LÀ bản demo (v1.7.5); và cho toàn bộ vòng cung, xem giải phẫu việc xuất xưởng phần mềm đến độ hoàn hảo.