
Møder du faktisk kan finde igen: timeline-releasen
GeekBye v1.7.3 erstattede møde-dropdownen med en rigtig tidslinje — menneskelige datoer, søgning og en breadcrumb, der fortæller hvilket møde du står i. Nedenunder: et auto-select-race, et screenshot der er ældre end sit eget møde, og fem Windows-fixes på otteogtyve minutter.
I januar 2026 havde GeekByes brugere et historikproblem. Appen optog og analyserede deres møder helt fint — og arkiverede dem så i en dropdown. En dropdown er fin til tre punkter. Ved møde nummer femten var "det interview fra sidste tirsdag" en arkæologisk udgravning gennem rækker, der lignede hinanden på en prik. v1.7.3 — 64 commits mellem midten af december og 16. januar — er releasen, hvor møder blev noget, du faktisk kan finde igen.
(Én bogholderi-note, for git-historikken er ærlig, selv når versionsnumrene ikke er: der findes intet v1.7.2-release-tag. Versionen blev bumpet, men det næste tag der udkom var v1.7.3, så Windows-fixene fra v1.7.2-æraen fulgte med i denne release.)
Fra dropdown til tidslinje
Hovedændringen er én pull request: 12 filer, +640 linjer, de fleste af dem en ny MeetingsTimeline-komponent på 381 linjer. Dropdownen blev til en scrollbar tidslinje af mødekort, grupperet i fire spande — Today, Yesterday, This Week, Older (i dag, i går, denne uge, ældre) — med datoer gengivet som et menneske ville sige dem: Today, 2:30 PM, Yesterday, 2:30 PM, Mon, 2:30 PM for denne uge og Jan 5, 2:30 PM længere tilbage. Cmd/Ctrl+K fokuserer et søgefelt, der filtrerer på titel. Mødedetaljevisningen blev en rigtig navigationsside, så navbarens frem- og tilbage-knapper endelig betyder noget, og breadcrumben holdt op med at sige "Meetings / Meeting" og begyndte at sige "Meetings / Interview with John" (afkortet med ellipse, for der er altid nogen, der navngiver et møde som en roman).
To små livskvalitets-detaljer fulgte med: en slet-knap inde i mødevisningen (som navigerer dig tilbage til tidslinjen efter sletning i stedet for at efterlade dig på en død side) og auto-navigation — når en lyttesession slutter med faktisk transskriptionsindhold, åbner dashboardet direkte på det mødes detaljeside. Afslut opkaldet, se mødet. Sessioner, der slutter tomme, slettes stille i stedet for at fylde tidslinjen op.
Racet du skaber ved at forbedre navigationen
Her er den del, changeloggen ikke fortæller dig. Den gamle mødeliste havde en vane: ved hver indlæsning auto-valgte den den nyeste session. Harmløst, når listen var en dropdown, du sjældent rørte. Fatalt i det øjeblik, møder blev en side, du navigerer på: klik på møde nr. 5, en baggrunds-refetch bliver færdig, og listen vælger hjælpsomt det nyeste møde — og overskriver det valg, du traf for to sekunder siden. Fixet var ikke en smartere gardering; det var at slette auto-selecten helt. Enhver liste, der vælger ting på brugerens vegne, ender med at kæmpe mod brugeren.
At fjerne den blotlagde det andet race. Auto-navigation hopper til et møde i samme øjeblik dets session slutter — hvilket kan være, før den session er færdig med at skrive sig selv til den lokale SQLite-database. Navigér for hurtigt, og du ankommer til et møde, der ikke findes endnu. Det udsendte fix er en forsinkelse på 500 millisekunder, før sessionerne indlæses ved ankomst i detaljevisningen, og navigationshandleren har sine egne garderinger — vent på vinduets did-finish-load plus 100ms, hvis dashboardet lige er oprettet, 50ms hvis det allerede var åbent. Vores læsning: navigation ved sessionsafslutning krydser tre timing-domæner — databaseskrivningen, vinduesindlæsningen og React-mountet — og hvert af dem fik sin egen lille forsinkelse. Det virker, og vi siger det ligeud: en stak magiske tal er ærlig gæld, ikke en sejr.
Screenshottet der er ældre end sit eget møde
Endnu en antagelse døde i denne release: "screenshots hører til en session, hvis og kun hvis de blev taget under den." Fuldkommen logisk. Forkert. Rigtige brugere trykker Cmd+H på jobopslaget, dagsordenen, koden de er ved at skulle diskutere — før de trykker Start. Report-fanen matchede screenshots til sessionens tidsinterval strengt, så de forberedelses-screenshots forsvandt fra netop den rapport, de var taget til. Fixet udvidede matching-vinduet med 60 sekunder før sessionsstart. (Selve tidsintervals-maskineriet er ældre — det udkom stille i v1.6.15; v1.7.3's bidrag er at lære det, at møder begynder lidt før de begynder.)
Fem fixes på otteogtyve minutter
Krigshistorien i denne release ligger slet ikke i tidslinjen — den ligger i Windows-onboarding-overlayet, og det er et lærebogseksempel på en "fix fixet"-kæde: fem commits mellem 10:50 og 11:18 samme formiddag.
GeekByes hovedvindue bruger muse-passthrough — et hook, der slår Electrons setIgnoreMouseEvents til og fra ved hver musebevægelse, så klik falder igennem gennemsigtige områder. Under onboarding på Windows kæmpede det hook mod tutorial-overlayet, og ved trinnet hvor dashboard-vinduet dukker op, frøs appen. Fix nummer ét: få hooket til at gøre ingenting, mens onboarding er aktiv. Fred gennem afvæbning.
Bortset fra at onboarding-knapperne nu ikke reagerede, fordi event-forwarding sendte klikkene til dashboard-vinduet under overlayet. Fix to og tre pillede ved forward: false per wizard. Så kom committen, der fandt den egentlige rodårsag: når dashboard-vinduet åbner, nulstiller dets drag-handler hovedvinduet til klik-igennem-tilstand — og det første fix havde gjort passthrough-hooket passivt, hvilket betød, at intet var tilbage til at rette indblandingen. Det rigtige fix vendte strategien om: hooket gen-hævder nu aktivt setIgnoreMouseEvents(false) ved hver musebevægelse under onboarding, netop fordi ekstern kode kan nulstille det når som helst. Det slettede også 75 linjer af de tidligere wizard-specifikke workarounds.
Og selv da kom der en femte commit, for at vinde input-krigen er ikke at vinde z-ordens-krigen: overlayet og dashboardet sad begge på samme always-on-top-niveau, og Windows hæver det vindue, der får fokus. Overlayet flyttede til et højere vinduesniveau og gen-hæver sig selv med en forsinkelse, efter dashboardet vises. Buen er værd at huske: et passivt fix, der afvæbner din eneste forsvarer, er værre end den oprindelige kamp.
Tre ting denne release lærte os
- Navigationsopgraderinger bringer tilstandsbugs frem. Auto-select-racet fandtes før v1.7.3; en dropdown lod dig bare aldrig mærke det. I det øjeblik møder blev en side, du bevidst navigerer på, blev hvert stykke kode, der valgte ting for dig, til en bug.
- Tidsgrænser omkring brugerens intention har brug for slæk. Sessioner, optagelser, rapporter — brugere handler lidt før og lidt efter maskinens officielle vindue. 60-sekunders screenshot-bufferen er én linje, der afspejler, hvordan folk faktisk opfører sig.
- Gør aldrig din korrigerende kode passiv. Windows-frysningen krævede fem fixes, fordi fix nummer ét slukkede den eneste mekanisme, der kunne modvirke ekstern indblanding. Hvis anden kode kan bryde din invariant når som helst, er dit job at gen-hævde den kontinuerligt, ikke at trække dig.
For det forrige kapitel i v1-historien — at bygge to brandede apps fra netop denne kodebase — se én kodebase, to apps: sådan white-labeler du uden at forke (v1.7.1); og for hele buen, anatomien i at shippe software til perfektion.