Steven
Steven7 मिनट पढ़ें

26 घंटों में चार रिलीज़: language की plumbing और एक "bridge release"

GeekBye v1.7.6 से v1.8.1 तक: एक language setting जो कभी laptop से बाहर ही नहीं निकली, एक Cmd+/ overlay जो आपकी असली keybindings दिखाता है, एक version जिसमें code का एक भी बदलाव नहीं — और auto-update feed migrate करने की मुर्गी-पहले-या-अंडा वाली उलझन।

इंजीनियरिंग
रिलीज़
डेस्कटॉप
GeekBye रिलीज़
26 घंटों में चार रिलीज़: language की plumbing और एक "bridge release"

February 2026 में एक गुरुवार की सुबह और शुक्रवार की दोपहर के बीच, GeekBye ने चार रिलीज़ ship कीं: v1.7.6, v1.7.7, v1.8.0 और v1.8.1 — 16 commits, पहले tag से आख़िरी tag तक क़रीब 26 घंटे। इनमें से कोई अकेली रिलीज़ headline नहीं बनती। पर मिलाकर देखें तो ये एक तस्वीर हैं कि छोटी-छोटी रिलीज़ों वाले हफ़्तों में असल में क्या-क्या होता है: एक feature जो आख़िरकार अपना सफ़र पूरा कर पाया, quality-of-life बढ़ाने वाला एक overlay, एक version number जिसके अंदर code है ही नहीं, और release engineering का एक सचमुच सिखाने वाला टुकड़ा।

वह language जो कभी laptop से बाहर नहीं निकली

GeekBye में transcript-language की setting September 2025 से है। वह काम करती थी — locally। Spanish चुनो, और on-device speech-to-text pipeline पूरी ईमानदारी से Spanish transcribe करती। पर v1.7.5 के codebase में उस setting को grep करो, तो वह ठीक तीन जगह मिलती है: audio handler, Settings UI, और settings hook। API client में नहीं। session tracker में नहीं। चार महीने तक, machine से बाहर जाने वाली हर request language से अनजान थी: backend के session records को पता ही नहीं था कि वे किस language के हैं, और AI chat को Spanish transcripts मिलते थे — इस इशारे के बिना कि वे Spanish हैं।

v1.7.6 वह रिलीज़ है जहाँ इस setting ने अपना सफ़र पूरा किया — दो commits, एक दिन। audio session start अब अपने payload में transcriptLanguage लेकर चलता है, और AI की stream-chat request में भी वही field आ गई — दोनों एक छोटे helper से होकर, जो setting पढ़ता है और auto या unset होने पर जान-बूझकर undefined लौटाता है, ताकि पुराने backends किसी अनजान field पर अटकने की बजाय आराम से gracefully degrade हो जाएँ। diff में एक चुपचाप bonus फ़िक्स भी छिपा है: language pass करने के लिए session start को language resolution के बाद खिसकाना पड़ा — और हमारी समझ में, इसी ने एक error path भी बंद कर दिया जहाँ session शुरू हो जाता (और limits में गिना जाता), और अगले ही पल language resolution fail होने पर लावारिस छूट जाता।

सबक़ आम है: कोई setting तब shipped नहीं होती जब उसका UI हो और असर दिखे। वह तब shipped होती है जब वह हर उस consumer तक पहुँच जाए जिसे उसके बारे में पता होना चाहिए। हमारी setting network की सरहद पर चार महीने रुकी रही, और किसी ने ध्यान नहीं दिया — क्योंकि local behavior, यानी जो दिखता था, पूरे समय सही था। (record के लिए कह दें, यह language handling का कच्चा पहला क़दम था; AI को बातचीत की language में सचमुच जवाब देना सिखाना इस कहानी का काफ़ी बाद का अध्याय है।)

Cmd+/ — एक overlay जो आपकी keybindings के बारे में झूठ नहीं बोलता

v1.8.0 का user-facing feature है Cmd+/ पर keyboard-shortcuts overlay — 193 lines का नया component, और एक design decision जो चुरा लेने लायक़ है: वह कोई hardcoded cheat sheet render नहीं करता। वह live shortcut configuration fetch करता है और customKeys || defaultKeys render करता है, ताकि जिसने keys remap की हैं उसे उसकी अपनी keys दिखें। जो shortcuts overlay keys बदल चुके user को defaults दिखाए, वह documentation नहीं है; वह अच्छी typography में लिपटी ग़लत जानकारी है।

बाक़ी छोटे-छोटे correctness वाले touches हैं: overlay ख़ुद तय करता है कि screen के जिस तरफ़ जगह है, app card के left या right बैठे, और Escape से, दोबारा Cmd+/ से, या बाहर click करने से बंद हो जाता है। Cmd+/ ख़ुद भी उसी remappable preset system में शामिल हो जाता है जिसमें हर दूसरा shortcut है — और यह मायने रखता है, क्योंकि ज़्यादातर editors में Cmd+/ "toggle comment" है, और developers के लिए बने tool को editor की किसी ऐसी key पर कब्ज़ा नहीं जमाना चाहिए जिसे आप हटा भी न सकें।

Bridge release

दिलचस्प engineering उन version numbers में हुई जिन्हें कोई पलटकर भी न देखे। v1.8.0 ने project की releases को एक नए GitHub organization पर भी migrate किया — ऊपर से देखो तो बस org की साफ़-सफ़ाई, सिवाय desktop auto-update की एक ख़ासियत के: feed का URL binary में baked होता है। हर v1.8.0 install नए organization की releases poll करता है। और दुनिया में मौजूद हर install — सारे के सारे v1.7.7 या उससे पुराने — हमेशा-हमेशा पुराना ही poll करते रहेंगे, जब तक वहाँ कुछ आ न जाए।

यही है मुर्गी-पहले-या-अंडा: अगली रिलीज़ सिर्फ़ नए repo पर publish करो, तो पूरा मौजूदा fleet उसे कभी देख ही नहीं पाएगा। v1.8.0 के tag के सोलह minute बाद release script में एक नया flag आया: --publish-owner, जो build के बाद यह बदल देता है कि electron-builder artifacts कहाँ upload करे — code comment के शब्दों में, साफ़-साफ़ "compiled app code को छुए बिना"। पूरी तरकीब बस इतनी है, और जोड़ ठीक यहीं बनता है: binary में baked feed और artifacts की upload destination दो अलग फ़ैसले हैं, और migration को एक रिलीज़ भर के लिए इन्हें अलग करना ज़रूरी है। v1.8.1 को नए feed की तरफ़ इशारा करते हुए build करो, उसे पुराने repo पर upload करो; पुराने clients को update वहीं दिखता है, वे install करते हैं, और जागते ही नया organization poll करने लगते हैं। commit message इसे "bridge release" कहता है, और नाम बिल्कुल सही है। v1.8.1 को v1.8.0 के 2 घंटे 20 मिनट बाद tag किया गया। (यह project auto-update को डर की हद तक छूती इज़्ज़त से क्यों देखता है, उसकी शुरुआती कहानी के लिए देखें वह auto-update जिसने हमारे app को अमर बना दिया।)

और v1.7.7? एक commit। ख़ुद version bump। न कोई फ़िक्स, न revert, न history में कोई सफ़ाई — हमारी सबसे ईमानदार समझ यह है कि कोई publish था जिसे दोबारा चलाना पड़ा, और कहानी गढ़ने से बेहतर है कि हम यही मान लें। कभी-कभी कोई version number इसलिए होता है क्योंकि software release करना असल दुनिया की प्रक्रिया है, असल दुनिया की हिचकियों समेत — source tree का pure function नहीं। रही बात इसकी कि 1.7 आख़िर 1.8 क्यों बना: कोई commit बताता नहीं, पर feed migration ही असली compatibility की सरहद है — हर 1.8.x binary उस organization को देखती है जो हर 1.7.x binary से अलग है — और minor bump का हक़दार यह किसी भी feature से ज़्यादा है।

तीन बातें जो इस हफ़्ते ने हमें सिखाईं

  1. setting का पीछा उसके हर consumer तक करो। language preference चार महीने तक "done" थी जबकि backend अनजान बैठा रहा। दिखने वाला local behavior सही था — और यही वह वजह है जिसने इस फ़ासले को ज़िंदा रखा। audit का सवाल है: "इस value के बारे में और किस-किस को पता होना चाहिए?" — और यह हर boundary पर पूछा जाए।
  2. live config render करो, documentation नहीं। shortcuts overlay वही source of truth पढ़ता है जो shortcut system इस्तेमाल करता है। बाक़ी हर तरीक़ा पहली ही बार user के customize करते ही भटकने लगता है।
  3. feed migration को एक ऐसी release चाहिए जो दोनों दुनियाओं में रहे। binary में नया feed, upload के लिए पुराना repo। अगर आपकी release tooling इन दो targets को अलग नहीं कर सकती, तो flag ज़रूरत पड़ने से पहले जोड़ लो — हमारा flag ज़रूरत पड़ने के 16 मिनट बाद पहुँचा, जिसे time पर ही गिन लेते हैं।

v1 कहानी के पिछले अध्याय के लिए देखें Login page ही असली demo है (v1.7.5); और पूरे चाप के लिए, सॉफ़्टवेयर को परिपूर्णता तक पहुँचाकर भेजने की शारीर-रचना

संबंधित लेख

बिना किसी safety net के तीस भाषाएँ ship करना
Steven
Steven9 मिनट पढ़ें

बिना किसी safety net के तीस भाषाएँ ship करना

GeekBye v1.8.3 ने react-i18next को जोड़ा और पूरे app को 30 भाषाओं में translate कर दिया। library वाला हिस्सा रवायती था। दिलचस्प हिस्सा वह है जो ग़ायब था: न कोई key-parity check, न कोई string extractor — इसलिए hardcoded English रिस गई, एक Danish typo ship हो गया, और changelog यह तय ही नहीं कर पाया कि app 28, 29 या 30 भाषाएँ बोलता है।

इंजीनियरिंग
i18n
डेस्कटॉप
ऐसी meetings जो सच में दोबारा मिल जाएँ: Timeline रिलीज़
Steven
Steven8 मिनट पढ़ें

ऐसी meetings जो सच में दोबारा मिल जाएँ: Timeline रिलीज़

GeekBye v1.7.3 ने meetings dropdown की जगह एक असली timeline दे दी — इंसानी अंदाज़ की तारीख़ें, search, और एक breadcrumb जो बताता है कि आप किस meeting में हैं। और सतह के नीचे: एक auto-select race, एक ऐसा screenshot जो अपनी ही meeting से पहले का है, और 28 minutes में five Windows fixes।

इंजीनियरिंग
UX
डेस्कटॉप
127-कमिट वाली रिलीज़ असल में क्या होती है
Steven
Steven6 मिनट पढ़ें

127-कमिट वाली रिलीज़ असल में क्या होती है

GeekBye v1.7.0 ग्यारह दिनों में 127 कमिट थी। बाहर से यह सौ छोटी-छोटी चीज़ों जैसी दिखती है। भीतर से यह दो बड़े फ़ीचर आपस में गुँथे हुए थे — और उनमें से एक गलत जगह बना दिया गया, फिर रिलीज़ के बीचोबीच उखाड़कर दोबारा बनाया गया। यह रही एक बड़ी रिलीज़ की शारीर-रचना।

इंजीनियरिंग
रिलीज़
आर्किटेक्चर