Steven
Steven5 хв читання

Чотири релізи за двадцять шість годин: мовна сантехніка та «bridge release»

GeekBye від v1.7.6 до v1.8.1: налаштування мови, яке жодного разу не покидало ноутбук, оверлей Cmd+/, що показує твої справжні гарячі клавіші, версія без жодної зміни в коді — і курка з яйцем при міграції фіда автооновлень.

Інженерія
Релізи
Десктоп
Релізи GeekBye
Чотири релізи за двадцять шість годин: мовна сантехніка та «bridge release»

Між ранком четверга й вечором п'ятниці в лютому 2026 GeekBye випустив чотири релізи: v1.7.6, v1.7.7, v1.8.0 і v1.8.1 — шістнадцять commits, близько двадцяти шести годин між першим тегом і останнім. Жоден із них окремо не тягне на заголовок. Разом вони — портрет того, з чого насправді складаються тижні дрібних релізів: фіча, що нарешті завершує свою подорож, оверлей для зручності, номер версії без жодного рядка коду всередині та один по-справжньому повчальний шматок release engineering.

Мова, яка жодного разу не покидала ноутбук

Налаштування мови транскриптів є в GeekBye з вересня 2025. Воно працювало — локально. Обери іспанську, і локальний пайплайн speech-to-text слухняно транскрибував іспанську. Але прогрепай кодову базу v1.7.5 на це налаштування — і знайдеш його рівно в трьох місцях: в аудіообробнику, в UI налаштувань і в хуку налаштувань. Не в API-клієнті. Не в трекері сесій. Чотири місяці кожен запит, що покидав машину, був сліпим до мови: записи сесій на бекенді гадки не мали, яку мову вони представляють, а AI-чат отримував іспанські транскрипти без жодного натяку на те, що вони іспанські.

v1.7.6 — реліз, у якому налаштування довершило свою подорож: два commits, один день. Старт аудіосесії тепер несе transcriptLanguage у пейлоаді, а запит stream-chat до AI отримав те саме поле, протягнуте через маленький хелпер, який читає налаштування й навмисно повертає undefined, коли воно дорівнює auto або не задане, — щоб старі бекенди деградували граційно, а не давилися полем, якого не знають. У дифі ховається й тихий бонус-фікс: щоб передати мову, старт сесії довелося перенести після розв'язання мови — що, як ми це читаємо, заодно закрило шлях помилки, в якому сесія могла стартувати (і зарахуватися в ліміти), а мить по тому осиротіти, коли розв'язання мови падало.

Урок узагальнюється: налаштування не відвантажене, коли в нього є UI та ефект. Воно відвантажене, коли доходить до кожного споживача, який має про нього знати. Наше чотири місяці зупинялося на межі мережі, і ніхто не помітив — бо локальна поведінка, та сама видима, увесь цей час була коректною. (Для протоколу: це був грубий перший захід на роботу з мовою; навчити AI справді відповідати мовою розмови — значно пізніший розділ цієї історії.)

Cmd+/ — оверлей, який не бреше про твої гарячі клавіші

Користувацька фіча v1.8.0 — оверлей гарячих клавіш за Cmd+/ — 193 рядки нового компонента й одне дизайн-рішення, яке варто вкрасти: він не рендерить захардкоджену шпаргалку. Він забирає живу конфігурацію шорткатів і рендерить customKeys || defaultKeys, тож користувач, що перемапив клавіші, бачить свої клавіші. Оверлей шорткатів, який показує дефолти тому, хто їх змінив, — це не документація; це дезінформація з приємною типографікою.

Решта — дрібні штрихи коректності: оверлей позиціонує себе ліворуч або праворуч від картки застосунку залежно від того, з якого боку екрана є місце, і закривається за Escape, за повторним Cmd+/ або за кліком зовні. Сам Cmd+/ вливається в ту саму переналаштовувану систему пресетів, що й будь-який інший шорткат, — і це важливо, бо Cmd+/ — це «toggle comment» (закоментувати) в більшості редакторів, а інструмент для розробників не повинен окупувати редакторську клавішу, яку не можна переназначити.

«Bridge release» — міст між світами

Цікава інженерія сталася в номерах версій, на які ніхто не глянув би двічі. v1.8.0 заодно мігрував релізи проєкту в нову організацію на GitHub — на поверхні організаційне прибирання, якби не одна властивість десктопних автооновлень: URL фіда зашитий у бінарник. Кожна інсталяція v1.8.0 опитує релізи нової організації. А кожна інсталяція в дикій природі — усі вони v1.7.7 або старші — опитує стару, вічно, поки там щось не з'явиться.

Ось вона, курка з яйцем: опублікуй наступний реліз лише в новому репозиторії — і весь наявний флот його ніколи не побачить. Через шістнадцять хвилин після тега v1.8.0 у релізному скрипті приземлився новий прапорець: --publish-owner, який переписує, куди electron-builder заливає артефакти після збірки — явно «не зачіпаючи скомпільований код застосунку», як формулює коментар у коді. У цьому весь трюк, і це рівно правильний шов: зашитий у бінарник фід і місце завантаження артефактів — два різні рішення, і міграції треба розчепити їх на один реліз. Збери v1.8.1, націлений на новий фід, залий його в старий репозиторій; старі клієнти бачать там оновлення, ставлять його й прокидаються, опитуючи нову організацію. Повідомлення commitа називає це «bridge release» — релізом-мостом, — і це правильна назва. v1.8.1 затегували через дві години двадцять хвилин після v1.8.0. (Історію про те, звідки в цього проєкту повага до автооновлень, що межує зі страхом, читай в автооновленні, яке зробило наш застосунок невбивним.)

А v1.7.7? Один commit. Сам бамп версії. Ні фікса, ні реверта, ні пояснення в історії — наше найкраще прочитання: публікація, яку довелося перезапустити, і ми радше визнаємо це, ніж вигадуватимемо історію. Іноді номер версії існує тому, що випуск софту — процес із реального світу з гикавками з реального світу, а не чиста функція дерева сирців. А чому 1.7 узагалі став 1.8: жоден commit не каже, але міграція фіда — ось змістовна межа сумісності: кожен бінарник 1.8.x дивиться на іншу організацію, ніж будь-який бінарник 1.7.x, — і це заслуговує на мінорний бамп більше, ніж будь-яка фіча.

Три речі, яких нас навчив цей тиждень

  1. Простеж налаштування до кожного споживача. Мовна преференція була «готова» чотири місяці, поки бекенд лишався сліпим. Саме коректність видимої, локальної поведінки й дозволила розриву вижити — аудиторське питання звучить як «хто ще має знати це значення?» і ставиться на кожній межі.
  2. Рендери живий конфіг, а не документацію. Оверлей шорткатів читає те саме джерело правди, яким користується система шорткатів. Усе інше роз'їжджається за першої ж кастомізації користувача.
  3. Міграції фіда потрібен один реліз, що живе в обох світах. Новий фід у бінарнику, старий репозиторій для завантаження. Якщо твій релізний тулінг не вміє розділяти ці дві цілі — додай прапорець до того, як він знадобиться; наш прибув через шістнадцять хвилин після того, як знадобився, що досить близько, аби зарахувати.

Про попередній розділ історії v1 — сторінка логіна і Є демо (v1.7.5); а про всю дугу — анатомію доставки програмного забезпечення до досконалості.

Схожі статті

Випуск тридцяти мов без страхувальної сітки
Steven
Steven7 хв читання

Випуск тридцяти мов без страхувальної сітки

GeekBye v1.8.3 підключив react-i18next і переклав увесь застосунок на 30 мов. Частина з бібліотекою була рутиною. Цікаве те, чого бракувало: ані перевірки паритету ключів, ані екстрактора рядків — тож зашитий у код англійський текст просочився, у продакшн поїхала данська друкарська помилка, а changelog не міг дійти згоди, скількома мовами говорить застосунок — 28, 29 чи 30.

Інженерія
i18n
Десктоп
Зустрічі, які знову можна знайти: реліз із таймлайном
Steven
Steven6 хв читання

Зустрічі, які знову можна знайти: реліз із таймлайном

GeekBye v1.7.3 замінив дропдаун зустрічей справжнім таймлайном — людські дати, пошук, хлібні крихти, що кажуть, у якій зустрічі ти перебуваєш. А під капотом: гонка авто-вибору, скриншот, старший за власну зустріч, і п'ять фіксів для Windows за двадцять вісім хвилин.

Інженерія
UX
Десктоп
Перепроєктування дашборда навколо одного хвильового графіка
Steven
Steven7 хв читання

Перепроєктування дашборда навколо одного хвильового графіка

GeekBye v1.8.2 перетворив дашборд із пульта керування записом на аналітичний вид тільки-для-читання — смуга статистики та 7-денний хвильовий графік. Обидва фірмові елементи були другими чернетками, випущеними протягом двадцяти хвилин після перших, того самого дня по обіді.

Інженерія
Дизайн
Дашборд