
Vier releases in zesentwintig uur: taal-loodgieterswerk en een bridge release
GeekBye v1.7.6 tot en met v1.8.1: een taalinstelling die de laptop nooit had verlaten, een Cmd+/-overlay die je echte keybindings toont, een versie met nul codewijzigingen — en het kip-en-ei-probleem van het migreren van je auto-update-feed.
Tussen een donderdagochtend en een vrijdagmiddag in februari 2026 shipte GeekBye vier releases: v1.7.6, v1.7.7, v1.8.0 en v1.8.1 — zestien commits, ongeveer zesentwintig uur tussen de eerste tag en de laatste. Geen van alle is op zichzelf een krantenkop. Samen zijn ze een portret van wat weken met kleine releases werkelijk bevatten: een feature die eindelijk zijn reis afmaakt, een quality-of-life-overlay, een versienummer zonder code erin, en één oprecht leerzaam stuk release engineering.
De taal die de laptop nooit verliet
GeekBye heeft sinds september 2025 een instelling voor de transcripttaal. Hij werkte — lokaal. Kies Spaans en de on-device speech-to-text-pipeline transcribeerde braaf Spaans. Maar grep de v1.7.5-codebase op die instelling en je vindt hem op precies drie plekken: de audiohandler, de Settings-UI en de settings-hook. Niet in de API-client. Niet in de sessietracker. Vier maanden lang was elk request dat de machine verliet taalblind: backend-sessierecords hadden geen idee welke taal ze representeerden, en de AI-chat ontving Spaanse transcripten zonder enige hint dat ze Spaans waren.
v1.7.6 is de release waarin de instelling zijn reis afmaakte — twee commits, één dag. De audio-sessiestart draagt nu transcriptLanguage in zijn payload, en het AI-stream-chat-request kreeg hetzelfde veld, doorgeregen via een kleine helper die de instelling leest en bewust undefined teruggeeft wanneer hij auto of niet gezet is, zodat oudere backends netjes degraderen in plaats van te stikken in een veld dat ze niet kennen. Er zit ook een stille bonusfix verstopt in de diff: om de taal te kunnen meesturen moest de sessiestart na de taalresolutie komen — wat, zoals wij het lezen, ook een errorpad sloot waarin een sessie kon worden gestart (en meegeteld tegen limieten) om vervolgens verweesd te raken wanneer de taalresolutie een moment later faalde.
De les generaliseert: een instelling is niet geshipt als hij een UI en een effect heeft. Hij is geshipt als hij elke consumer bereikt die ervan zou moeten weten. De onze stopte vier maanden lang bij de netwerkgrens, en niemand merkte het, omdat het lokale gedrag — het zichtbare gedrag — de hele tijd correct was. (Dit was de ruwe eerste versie van taalafhandeling, voor de goede orde; de AI leren om ook echt in de taal van het gesprek te antwoorden is een veel later hoofdstuk van dit verhaal.)
Cmd+/ — een overlay die niet liegt over je keybindings
De user-facing feature van v1.8.0 is een sneltoetsen-overlay op Cmd+/ — 193 regels nieuwe component, en één designbeslissing die het stelen waard is: hij rendert geen hardcoded spiekbriefje. Hij haalt de live shortcut-configuratie op en rendert customKeys || defaultKeys, zodat een gebruiker die zijn toetsen heeft geremapt zijn toetsen ziet. Een shortcuts-overlay die defaults toont aan iemand die ze heeft veranderd is geen documentatie; het is desinformatie met mooie typografie.
De rest is klein correctheidswerk: de overlay positioneert zichzelf links of rechts van de app-card, afhankelijk van welke kant van het scherm ruimte heeft, en sluit op Escape, op nogmaals Cmd+/, of op een klik erbuiten. Cmd+/ zelf sluit aan bij hetzelfde remapbare presetsysteem als elke andere shortcut — en dat doet ertoe, want Cmd+/ is "toggle comment" in de meeste editors, en een tool voor developers hoort niet te gaan zitten op een editortoets die je niet kunt verplaatsen.
De bridge release
De interessante engineering gebeurde in de versienummers waar niemand twee keer naar zou kijken. v1.8.0 migreerde ook de releases van het project naar een nieuwe GitHub-organisatie — org-huishoudwerk aan de oppervlakte, op één eigenschap van desktop-auto-update na: de feed-URL is ingebakken in de binary. Elke v1.8.0-installatie pollt de releases van de nieuwe organisatie. En elke installatie daarbuiten in de wereld — allemaal v1.7.7 of ouder — pollt de oude, voor eeuwig, tenzij daar iets verschijnt.
Dat is het kip-en-ei-probleem: publiceer je volgende release alleen naar de nieuwe repo en de hele bestaande vloot ziet hem nooit. Zestien minuten na de v1.8.0-tag landde een nieuwe flag in het releasescript: --publish-owner, die herschrijft waar electron-builder de artifacts naartoe uploadt na de build — expliciet "without affecting the compiled app code", zoals de codecomment het formuleert. Dat is de hele truc, en het is precies de juiste naad: de ingebakken feed van de binary en de uploadbestemming van de artifacts zijn twee verschillende beslissingen, en een migratie heeft ze voor één release ontkoppeld nodig. Bouw v1.8.1 wijzend naar de nieuwe feed, upload hem naar de oude repo; oude clients zien de update daar, installeren hem, en worden wakker terwijl ze de nieuwe organisatie pollen. De commit message noemt dit een "bridge release", en dat is de juiste naam. v1.8.1 werd getagd twee uur en twintig minuten na v1.8.0. (Voor het ontstaansverhaal van waarom dit project auto-update behandelt met respect dat aan angst grenst, zie de auto-update die onze app onsterfelijk maakte.)
En v1.7.7? Eén commit. De versiebump zelf. Geen fix, geen revert, geen uitleg in de history — onze beste lezing is een publish die opnieuw gedraaid moest worden, en dat geven we liever toe dan dat we een verhaal verzinnen. Soms bestaat een versienummer omdat software releasen een real-world proces is met real-world hobbels, geen pure functie van de source tree. En waarom 1.7 überhaupt 1.8 werd: geen commit die het zegt, maar de feedmigratie is de betekenisvolle compatibiliteitsgrens — elke 1.8.x-binary kijkt naar een andere organisatie dan elke 1.7.x-binary — en dat verdient een minor bump meer dan welke feature dan ook.
Drie dingen die deze week ons leerde
- Traceer een instelling naar elke consumer. De taalvoorkeur was vier maanden lang "af" terwijl de backend blind bleef. Dat het zichtbare, lokale gedrag correct was, is precies wat het gat liet overleven — de auditvraag is "wie zou hier nog meer van moeten weten?", gesteld bij elke grens.
- Render live config, geen documentatie. De shortcuts-overlay leest dezelfde source of truth die het shortcutsysteem gebruikt. Al het andere drijft af zodra een gebruiker iets aanpast.
- Een feedmigratie heeft één release nodig die in beide werelden leeft. Nieuwe feed in de binary, oude repo voor de upload. Als je releasetooling die twee doelen niet kan scheiden, voeg de flag toe voordat je hem nodig hebt — de onze kwam zestien minuten nadat hij nodig was, wat dichtbij genoeg is om te tellen.
Voor het vorige hoofdstuk in het v1-verhaal, de loginpagina IS de demo (v1.7.5); en voor de hele boog, de anatomie van software tot in de perfectie uitbrengen.