
Fyra releaser på tjugosex timmar: språkrörläggning och en "bridge release"
GeekBye v1.7.6 till v1.8.1: en språkinställning som aldrig lämnat laptopen, en Cmd+/-overlay som visar dina riktiga tangentbindningar, en version med noll kodändringar — och hönan-och-ägget i att migrera sitt auto-update-flöde.
Mellan en torsdagsmorgon och en fredagseftermiddag i februari 2026 skeppade GeekBye fyra releaser: v1.7.6, v1.7.7, v1.8.0 och v1.8.1 — sexton commits, ungefär tjugosex timmar mellan första taggen och sista. Ingen enskild av dem är en rubrik. Tillsammans är de ett porträtt av vad småreleaseveckor faktiskt innehåller: en funktion som äntligen avslutar sin resa, en quality-of-life-overlay, ett versionsnummer utan kod i sig, och en genuint lärorik bit release engineering.
Språket som aldrig lämnade laptopen
GeekBye har haft en inställning för transkriptspråk sedan september 2025. Den fungerade — lokalt. Välj spanska, och den lokala tal-till-text-pipelinen transkriberade plikttroget spanska. Men greppa v1.7.5-kodbasen efter den inställningen och du hittar den på exakt tre ställen: audio-hanteraren, Settings-UI:t och settings-hooken. Inte i API-klienten. Inte i sessionsspåraren. I fyra månader var varje request som lämnade maskinen språkblind: backendens sessionsposter hade ingen aning om vilket språk de representerade, och AI-chatten fick spanska transkript utan minsta hint om att de var spanska.
v1.7.6 är releasen där inställningen avslutade sin resa — två commits, en dag. Audiosessionens start bär nu transcriptLanguage i sin payload, och AI:ns stream-chat-request fick samma fält, trätt genom en liten hjälpfunktion som läser inställningen och medvetet returnerar undefined när den är auto eller osatt, så att äldre backends degraderar snyggt i stället för att sätta i halsen på ett fält de inte känner till. Det gömmer sig en tyst bonusfix i diffen också: för att kunna skicka med språket var sessionsstarten tvungen att flytta till efter språkupplösningen — vilket, som vi läser det, också stängde en felväg där en session kunde startas (och räknas mot limits) och sedan bli föräldralös när språkupplösningen fallerade ett ögonblick senare.
Lärdomen generaliserar: en inställning är inte skeppad när den har ett UI och en effekt. Den är skeppad när den når varje konsument som borde känna till den. Vår stannade vid nätverksgränsen i fyra månader, och ingen märkte det, eftersom det lokala beteendet — det synliga beteendet — var korrekt hela tiden. (Det här var den grova första ansatsen till språkhantering, för protokollet; att lära AI:n att faktiskt svara på konversationens språk är ett mycket senare kapitel i den här historien.)
Cmd+/ — en overlay som inte ljuger om dina tangentbindningar
v1.8.0:s användarvända funktion är en kortkommando-overlay på Cmd+/ — 193 rader ny komponent, och ett designbeslut värt att sno: den renderar inte ett hårdkodat fusklapp. Den hämtar den levande kortkommandokonfigurationen och renderar customKeys || defaultKeys, så en användare som mappat om sina tangenter ser sina tangenter. En kortkommando-overlay som visar defaults för någon som ändrat dem är inte dokumentation; det är desinformation med snygg typografi.
Resten är små korrekthetsdetaljer: overlayn positionerar sig till vänster eller höger om appkortet beroende på vilken sida av skärmen som har plats, och stängs på Escape, på Cmd+/ igen eller på ett klick utanför. Cmd+/ själv ansluter till samma ommappningsbara preset-system som varje annat kortkommando — vilket spelar roll, eftersom Cmd+/ är "toggle comment" i de flesta editorer, och ett verktyg för utvecklare inte bör ockupera en editortangent du inte kan flytta.
Bridge-releasen
Den intressanta ingenjörskonsten hände i versionsnumren ingen skulle titta två gånger på. v1.8.0 migrerade också projektets releaser till en ny GitHub-organisation — org-städning på ytan, om det inte vore för en egenskap hos desktop-auto-update: flödes-URL:en är inbakad i binären. Varje v1.8.0-installation pollar den nya organisationens releaser. Och varje installation där ute i världen — alla v1.7.7 eller äldre — pollar den gamla, för evigt, om inte något dyker upp där.
Det är hönan-och-ägget: publicera din nästa release enbart till det nya repot och hela den existerande flottan ser den aldrig. Sexton minuter efter v1.8.0-taggen landade en ny flagga i release-skriptet: --publish-owner, som skriver om vart electron-builder laddar upp artefakterna efter bygget — uttryckligen "utan att påverka den kompilerade appkoden", som kodkommentaren formulerar det. Det är hela tricket, och det är exakt rätt söm: binärens inbakade flöde och artefakternas uppladdningsdestination är två olika beslut, och en migrering behöver dem frikopplade under en release. Bygg v1.8.1 pekande mot det nya flödet, ladda upp den till det gamla repot; gamla klienter ser uppdateringen där, installerar den och vaknar upp pollande den nya organisationen. Commit-meddelandet kallar det här en "bridge release", vilket är rätt namn. v1.8.1 taggades två timmar och tjugo minuter efter v1.8.0. (För ursprungshistorien om varför det här projektet behandlar auto-update med en respekt som gränsar till skräck, se auto-uppdateringen som gjorde vår app odödbar.)
Och v1.7.7? En commit. Själva versionsbumpen. Ingen fix, ingen revert, ingen förklaring i historiken — vår bästa läsning är en publicering som behövde köras om, och vi erkänner hellre det än hittar på en historia. Ibland finns ett versionsnummer för att det att släppa mjukvara är en verklighetsprocess med verklighetshicka, inte en ren funktion av källträdet. Vad gäller varför 1.7 alls blev 1.8: ingen commit säger det, men flödesmigreringen är den meningsfulla kompatibilitetsgränsen — varje 1.8.x-binär tittar på en annan organisation än varje 1.7.x-binär — och det förtjänar en minor-bump mer än någon funktion gör.
Tre saker den här veckan lärde oss
- Spåra en inställning till varje konsument. Språkpreferensen var "klar" i fyra månader medan backenden förblev blind. Att det synliga, lokala beteendet var korrekt är precis vad som lät gapet överleva — granskningsfrågan är "vem mer borde känna till det här värdet?", ställd vid varje gräns.
- Rendera levande konfiguration, inte dokumentation. Kortkommando-overlayn läser samma källa till sanning som kortkommandosystemet använder. Allt annat driftar första gången en användare anpassar något.
- En flödesmigrering behöver en release som lever i båda världarna. Nytt flöde i binären, gammalt repo för uppladdningen. Om ditt release-verktyg inte kan separera de två målen, lägg till flaggan innan du behöver den — vår kom sexton minuter efter att den behövdes, vilket är nära nog för att räknas.
För det föregående kapitlet i v1-historien, inloggningssidan ÄR demot (v1.7.5); och för hela bågen, anatomin i att skeppa mjukvara till perfektion.