
Palaverit, jotka oikeasti löydät: aikajanajulkaisu
GeekBye v1.7.3 korvasi palaverien pudotusvalikon oikealla aikajanalla — inhimilliset päivämäärät, haku ja murupolku, joka kertoo missä palaverissa olet. Pinnan alla: automaattivalinnan kilpailutilanne, kuvakaappaus joka on palaveriaan vanhempi, ja viisi Windows-korjausta kahdessakymmenessäkahdeksassa minuutissa.
Tammikuuhun 2026 mennessä GeekByen käyttäjillä oli historiaongelma. Sovellus nauhoitti ja analysoi heidän palaverinsa ihan hyvin — ja arkistoi ne sitten pudotusvalikkoon. Pudotusvalikko toimii kolmelle riville. Viidennentoista palaverin kohdalla "se haastattelu viime tiistailta" oli arkeologinen kaivausretki identtisen näköisten rivien läpi. v1.7.3 — 64 commitia joulukuun puolivälistä 16. tammikuuta — on julkaisu, jossa palavereista tuli jotain, minkä oikeasti löydät.
(Yksi kirjanpitohuomio, koska git-historia on rehellinen silloinkin kun versionumerot eivät ole: v1.7.2-julkaisutagia ei ole. Versio kyllä korotettiin, mutta seuraava toimitettu tagi oli v1.7.3, joten v1.7.2-aikakauden Windows-korjaukset kulkivat tässä julkaisussa mukana.)
Pudotusvalikosta aikajanaksi
Pääuudistus on yksi pull request: 12 tiedostoa, +640 riviä, suurin osa niistä uusi 381-rivinen MeetingsTimeline-komponentti. Pudotusvalikosta tuli vieritettävä palaverikorttien aikajana, ryhmiteltynä neljään lokeroon — Today, Yesterday, This Week, Older (tänään, eilen, tällä viikolla, vanhemmat) — päivämäärillä, jotka renderöidään niin kuin ihminen ne sanoisi: Today, 2:30 PM, Yesterday, 2:30 PM, Mon, 2:30 PM tälle viikolle ja Jan 5, 2:30 PM sitä kauempana. Cmd/Ctrl+K kohdistaa hakukenttään, joka suodattaa otsikon mukaan. Palaverin detaljinäkymästä tuli oikea navigointisivu, joten navbarin edellinen/seuraava-napit tarkoittavat vihdoin jotain, ja murupolku lakkasi lukemasta "Meetings / Meeting" ja alkoi lukea "Meetings / Interview with John" (katkaistuna ellipsillä, koska joku nimeää palaverinsa aina kuin romaanin).
Mukana tuli kaksi pientä elämänlaatupalaa: poistonappi palaverinäkymän sisällä (joka poiston jälkeen navigoi sinut takaisin aikajanalle sen sijaan että jättäisi sinut kuolleelle sivulle) ja automaattinen navigointi — kun kuuntelusessio päättyy oikealla transkriptisisällöllä, dashboard avautuu suoraan sen palaverin detaljisivulle. Lopeta puhelu, näe palaveri. Tyhjinä päättyvät sessiot poistetaan hiljaa aikajanan roskaamisen sijaan.
Kilpailutilanne, jonka luot parantamalla navigointia
Tässä on osa, jota muutosloki ei kerro. Vanhalla palaverilistalla oli tapa: joka latauksella se valitsi automaattisesti uusimman session. Harmitonta, kun lista oli pudotusvalikko, johon harvoin koskit. Kohtalokasta sillä hetkellä, kun palavereista tuli sivu jolla navigoit: klikkaa palaveria nro 5, taustalla valmistuu refetch, ja lista valitsee avuliaasti uusimman palaverin — ylikirjoittaen valinnan, jonka teit kaksi sekuntia sitten. Korjaus ei ollut ovelampi suojamekanismi; se oli automaattivalinnan poistaminen kokonaan. Jokainen lista, joka valitsee asioita käyttäjän puolesta, taistelee lopulta käyttäjää vastaan.
Sen poistaminen paljasti toisen kilpailutilanteen. Automaattinen navigointi hyppää palaveriin sillä hetkellä kun sen sessio päättyy — mikä voi olla ennen kuin sessio on saanut kirjoitettua itsensä paikalliseen SQLite-tietokantaan. Navigoi liian nopeasti ja saavut palaveriin, jota ei vielä ole. Toimitettu korjaus on 500 millisekunnin viive ennen sessioiden lataamista detaljinäkymään saavuttaessa, ja navigointikäsittelijällä on omat varmistuksensa — odota ikkunan did-finish-load-tapahtumaa plus 100ms jos dashboard juuri luotiin, 50ms jos se oli jo auki. Meidän tulkintamme: session päättymisen navigointi ylittää kolme ajoitusaluetta — tietokantakirjoituksen, ikkunan latauksen ja Reactin mountin — ja jokainen sai oman pienen viiveensä. Se toimii, ja sanotaan suoraan: pino maagisia numeroita on rehellistä velkaa, ei voitto.
Kuvakaappaus, joka on palaveriaan vanhempi
Vielä yksi oletus kuoli tässä julkaisussa: "kuvakaappaus kuuluu sessioon jos ja vain jos se otettiin sen aikana." Täysin loogista. Väärin. Oikeat käyttäjät painavat Cmd+H työpaikkailmoituksen, agendan ja kohta käsiteltävän koodin päällä — ennen Startin painamista. Report-välilehti sovitti kuvakaappaukset session aikaväliin tiukasti, joten ne valmistelukuvat katosivat raportista, jota varten ne otettiin. Korjaus levensi sovitusikkunaa 60 sekunnilla ennen session alkua. (Aikaväli-koneisto itsessään on vanhempi — se toimitettiin hiljaa v1.6.15:ssä; v1.7.3:n panos on opettaa sille, että palaverit alkavat hieman ennen kuin ne alkavat.)
Viisi korjausta kahdessakymmenessäkahdeksassa minuutissa
Tämän julkaisun sotatarina ei ole aikajanassa ollenkaan — se on Windowsin onboarding-overlayssa, ja se on oppikirjaesimerkki "korjaa korjaus" -ketjusta: viisi commitia saman aamun kello 10:50 ja 11:18 välillä.
GeekByen pääikkuna käyttää hiiren läpipäästöä — hookia, joka kytkee Electronin setIgnoreMouseEvents-tilaa joka hiirenliikkeellä, jotta klikkaukset putoavat läpinäkyvien alueiden läpi. Windowsin onboardingin aikana se hook taisteli tutoriaali-overlayta vastaan, ja vaiheessa jossa dashboard-ikkuna ilmestyy, sovellus jäätyi. Korjaus yksi: laita hook tekemään ei mitään onboardingin ajaksi. Rauha aseistariisunnalla.
Paitsi että nyt onboarding-napit eivät vastanneet, koska tapahtumien edelleenlähetys toimitti klikkaukset overlayn alla olevalle dashboard-ikkunalle. Korjaukset kaksi ja kolme näpertelivät forward: false -asetusta wizard kerrallaan. Sitten tuli commit, joka löysi todellisen juurisyyn: kun dashboard-ikkuna avautuu, sen raahauskäsittelijä palauttaa pääikkunan läpiklikattavaan tilaan — ja ensimmäinen korjaus oli tehnyt passthrough-hookista passiivisen, mikä tarkoitti että mikään ei jäänyt korjaamaan häirintää. Oikea korjaus käänsi strategian ympäri: hook vahvistaa nyt onboardingin aikana aktiivisesti setIgnoreMouseEvents(false) joka hiirenliikkeellä, juuri siksi että ulkoinen koodi voi nollata sen milloin tahansa. Se myös poisti 75 riviä aiempia wizard-kohtaisia kiertoteitä.
Ja silloinkin tarvittiin viides commit, koska syöttösodan voittaminen ei ole z-järjestyssodan voittamista: overlay ja dashboard istuivat molemmat samalla always-on-top-tasolla, ja Windows nostaa sen ikkunan, joka saa fokuksen. Overlay siirtyi korkeammalle ikkunatasolle ja nostaa itsensä viiveellä uudelleen dashboardin ilmestyttyä. Kaari kannattaa muistaa: passiivinen korjaus, joka riisuu aseista ainoan puolustajasi, on pahempi kuin alkuperäinen taistelu.
Kolme asiaa, jotka tämä julkaisu opetti meille
- Navigointiparannukset nostavat tilabugit pintaan. Automaattivalinnan kilpailutilanne oli olemassa ennen v1.7.3:a; pudotusvalikko ei vain koskaan antanut sinun tuntea sitä. Sillä hetkellä kun palavereista tuli sivu jolla tietoisesti navigoit, jokaisesta koodinpätkästä joka valitsi asioita puolestasi tuli bugi.
- Käyttäjän aikomusta ympäröivät aikarajat tarvitsevat löysää. Sessiot, nauhoitukset, raportit — käyttäjät toimivat hieman ennen ja jälkeen koneen virallisen ikkunan. 60 sekunnin kuvakaappauspuskuri on yksi rivi, joka heijastaa sitä miten ihmiset oikeasti käyttäytyvät.
- Älä koskaan tee korjaavasta koodistasi passiivista. Windows-jäätyminen vaati viisi korjausta, koska korjaus yksi sammutti ainoan mekanismin, joka olisi voinut torjua ulkoista häirintää. Jos jokin toinen koodi voi rikkoa invarianttisi milloin tahansa, tehtäväsi on vahvistaa se jatkuvasti uudelleen, ei vetäytyä.
Edellinen luku v1-tarinassa — kahden brändätyn sovelluksen rakentaminen tästä samasta koodipohjasta — yksi koodipohja, kaksi sovellusta: white-label ilman forkkausta (v1.7.1); ja koko kaarelle, ohjelmiston toimittamisen anatomia täydellisyyteen asti.