Steven
Steven6 मिनट पढ़ें

आपका AI notetaker मीटिंग के बीच में रिकॉर्डिंग क्यों बंद कर देता है

हमारे अपने ऐप ने हमारी दो मीटिंग्स तब खत्म कर दीं जब सामने वाला वाक्य के बीच में था। फोरेंसिक जांच का सुराग एक नेक इरादे वाले idle टाइमर तक पहुंचा जो आपके सिवा किसी को सुन ही नहीं सकता था — और एक दूसरा बग जो आपका पूरा डेस्कटॉप लॉक कर सकता था। दोनों GeekBye v2.0.9 में ठीक।

विश्वसनीयता
मीटिंग्स
इंजीनियरिंग
GeekBye रिलीज़
आपका AI notetaker मीटिंग के बीच में रिकॉर्डिंग क्यों बंद कर देता है

2 जुलाई को GeekBye ने खुद ही एक मीटिंग रिकॉर्डिंग खत्म कर दी। डेटाबेस की row सब कुछ कह देती है: ended_reason = 'idle', अवधि 519 सेकंड, 99 ट्रांसक्रिप्ट एंट्रीज़ — आखिरी एंट्री ऐप के "यहां कोई नहीं है" तय करने से दो सेकंड पहले लिखी गई।

सामने वाला पार्टिसिपेंट अपनी बात समझाने के बीच में था। ट्रांसक्रिप्ट की आखिरी लाइन सचमुच एक अधूरा वाक्य है: "...executes it or turns it on or so—".

यह पहली बार नहीं था। एक शाम पहले एक और सेशन ठीक इसी तरह खत्म हुआ था। दो मीटिंग्स, हमारे अपने ही reliability फीचर के हाथों खत्म। यहां है डायग्नोसिस और वह फिक्स जो GeekBye v2.0.9 में शिप हुआ — साथ में एक दूसरा, इससे भी डरावना बग जो हमने उसी रिलीज़ में ठीक किया।

एक नेक इरादे वाला टाइमर जो सिर्फ आपको सुन सकता था

Idle auto-close एक अच्छी वजह से मौजूद है। लोग रिकॉर्डिंग रातभर चलती छोड़ देते हैं; खुला छूटा मीटिंग टैब हमेशा के लिए ऑडियो टपकाता रहता है। इसलिए GeekBye निष्क्रियता पर नजर रखता है: 60 सेकंड बिना voiced गतिविधि के बीतते ही वह एक छोटा "Still recording?" (क्या रिकॉर्डिंग अभी भी चल रही है?) प्रॉम्प्ट दिखाता है, और 30 सेकंड बाद, जवाब न मिलने पर, सेशन खत्म कर देता है — सब कुछ सेव करके, विनम्रता से।

खोट एक ही शब्द में थी: voiced. Activity की घड़ी सिर्फ लगातार माइक्रोफोन एनर्जी गिनती थी। यह एक सोचा-समझा डिजाइन फैसला था, और बेवकूफी भरा भी नहीं — कच्ची system-audio एनर्जी गिनने से एक muted-लेकिन-शोरगुल वाला टैब किसी मरे हुए सेशन को हमेशा के लिए जिंदा रख सकता था, जो ठीक वही नाकामी है जिसे रोकने के लिए यह फीचर बना है। जिन मीटिंग्स में आप ज्यादातर सुनते हैं, उन्हें meeting-window detection से कवर होना था।

बस, meeting detection हर मीटिंग देख नहीं सकता। ब्राउज़र टैब, असामान्य क्लाइंट, कोई प्रेजेंटेशन जो आप देख रहे हैं — undetected. और एक undetected मीटिंग में जहां आप 90 सेकंड सुनते हैं — जो किसी के अपनी Databricks pipeline समझाने के दौरान बिल्कुल सामान्य बात है — आप idle घड़ी की नजर में एक खाली कमरे से अलग नहीं हैं।

खत्म किए गए सेशन की टाइमलाइन देखिए: हमारे माइक्रोफोन से आखिरी ट्रांसक्रिप्ट अंत से 68 सेकंड पहले आया था। फिर 60 सेकंड दूसरे व्यक्ति की बातचीत (पूरी तरह ट्रांसक्राइब हुई, घड़ी ने नजरअंदाज की), अनदेखा रह गया प्रॉम्प्ट, 30 सेकंड का काउंटडाउन, और किल — उनके आखिरी शब्दों के 2 सेकंड बाद।

फिक्स: ट्रांसक्रिप्ट ही जिंदा होने का सबूत है

सुधार पीछे मुड़कर देखने पर लगभग शर्मिंदा करने वाला है: एक आने वाला ट्रांसक्रिप्ट इस बात का सबसे मजबूत संभव सबूत है कि सेशन idle नहीं है। कौन बोला, इससे फर्क नहीं पड़ता। स्पीच मॉडल ने अभी-अभी शब्द पहचाने हैं — यही तो मीटिंग है।

इसलिए v2.0.9 हर आने वाले ट्रांसक्रिप्ट पर activity की घड़ी को स्टैम्प करता है, चाहे वह किसी भी तरफ से आए। कच्ची system-audio एनर्जी अब भी नहीं गिनी जाती — संगीत, hold tones और HVAC की भनभनाहट अब भी किसी मरे हुए सेशन को अमर नहीं बना सकते, और hard recording cap अब भी हर चीज का backstop है। सिर्फ पहचानी गई speech ही सेशन को जिंदा रखती है, जो बिल्कुल सही सीमा है।

Code review से निकली एक बात आगे बढ़ाने लायक है: फिक्स के पहले वर्जन ने घड़ी को speaker-attribution path के अंदर स्टैम्प किया था — जिसे ट्रांसक्रिप्ट्स का एक हिस्सा जायज तौर पर skip कर सकता है। Review ने पकड़ा कि भविष्य का कोई बदलाव इस बग को चुपचाप ठीक उन्हीं ट्रांसक्रिप्ट्स के लिए वापस ला सकता था जो सबसे ज्यादा मायने रखते हैं (दूसरे वक्ता के)। स्टैम्प अब बिना शर्त है, किसी भी branching से पहले, और साथ में एक टेस्ट है जो कोई उसे हिलाए तो fail हो जाता है।

उसी रिलीज़ ने कुछ और डरावना भी ठीक किया

इन फिक्सेस को टेस्ट करते हुए हम एक अलग बग से मुश्किल तरीके से टकराए: interface प्रोसेस में एक crash ने पूरा डेस्कटॉप unclickable छोड़ दिया।

GeekBye का overlay एक पारदर्शी, always-on-top विंडो है जो आपकी स्क्रीन को ढकती है। डिफॉल्ट रूप से यह click-through है; जब आप कोई पैनल इस्तेमाल कर रहे होते हैं तो interface उसे interactive कर देता है। ये toggles interface प्रोसेस से आते हैं — इसलिए जब वह प्रोसेस किसी खुले पैनल के साथ crash हुई, तो अदृश्य विंडो interactive मोड में अटकी रह गई और उसके पीछे कोई जिंदा UI नहीं था। आपके डेस्कटॉप का हर क्लिक एक मरे हुए, अदृश्य शीशे पर जाकर गिरता था। बचने का इकलौता रास्ता था ऐप को force-quit करना।

v2.0.9 का crash handler अब तुरंत click-through बहाल करता है और interface को reload करता है — प्रति मिनट तीन reloads की cap के साथ, ताकि कोई crash-loop हमेशा के लिए घूमता न रहे (cap के पार ऐप reload की कोशिश छोड़ देता है, लेकिन आपका डेस्कटॉप इस्तेमाल के लायक बना रहता है, जो असल में मायने रखने वाली बात है)। इसे भी code review ने और धारदार बनाया: रिकवरी खासतौर पर overlay विंडो तक सीमित है, क्योंकि किसी crashed सामान्य विंडो — मान लीजिए update dialog — पर आंख मूंदकर click-through लगा देना ठीक उल्टा lockout पैदा कर देता।

यह फिक्स आप खुद, बेरहमी से, verify कर सकते हैं: GeekBye का कोई पैनल खोलिए, Activity Monitor में "GeekBye Helper (Renderer)" प्रोसेस को force-kill कीजिए, और देखिए कि ऐप एक सेकंड के भीतर आपका डेस्कटॉप वापस लौटा देता है।

बगों की इस जोड़ी ने हमें क्या सिखाया

  1. "क्या यूज़र यहां है?" का हर proxy कहीं न कहीं फेल होता है। माइक एनर्जी सुनने वालों के लिए फेल है। विंडो detection ब्राउज़र के लिए फेल है। पहचाने गए ट्रांसक्रिप्ट फेल हैं... अब तक हमें ऐसी कोई जगह नहीं मिली, क्योंकि वे proxy हैं ही नहीं — वे खुद प्रोडक्ट हैं।
  2. जो कुछ भी renderer-driven है, उसके पास एक crash story होनी चाहिए। अगर एक मरी हुई UI प्रोसेस OS-स्तर की state पीछे छोड़ सकती है (mouse capture, always-on-top, content protection), तो reset की मालिक main प्रोसेस को होना चाहिए।
  3. खुद अपना सबसे भारी यूज़र होना एक bug-finding रणनीति है। दोनों बग मुट्ठीभर से ज्यादा ग्राहकों की नजर में आने से पहले असली मीटिंग्स में हमसे टकराए। Observability के लिए महीनों पहले जोड़ा गया ended_reason कॉलम ही वह चीज थी जिसने डायग्नोसिस को अंदाजे की जगह एक डेटाबेस क्वेरी बना दिया।

दोनों फिक्स डायग्नोसिस से लेकर एक shipped, notarized रिलीज़ तक एक दिन के भीतर पहुंचे, हर एक regression tests वाले reviewed PR के सहारे। अगर आप GeekBye v2 पर हैं, तो auto-update के जरिए ये आपके पास v2.0.9 से ही हैं।

इस रिलीज़ की बाकी कहानी के लिए देखें सीरीज़ का पड़ोसी लेख AI ट्रांसक्रिप्शन तकनीकी शब्दों को गलत क्यों सुनता है (v2.0.11), विश्वसनीयता की नींव खराब Wi-Fi पर आपका AI notetaker क्यों रुक जाता है में, और यह कि overlay आपके क्लिक चुराए बिना screen sharing के दौरान अदृश्य कैसे रहता है

संबंधित लेख

AI ट्रांसक्रिप्शन तकनीकी शब्दों को गलत क्यों सुनता है (और हमने इसे कैसे ठीक किया)
Steven
Steven7 मिनट पढ़ें

AI ट्रांसक्रिप्शन तकनीकी शब्दों को गलत क्यों सुनता है (और हमने इसे कैसे ठीक किया)

एक लाइव सेशन ने "what is the pointer in C++" को "what is the point in life" सुन लिया। यह उस ट्रांसक्रिप्ट से GeekBye v2.0.11 तक की फोरेंसिक जांच की कहानी है — keyterm biasing, कनेक्शन गिराने वाली एक टाइमिंग रेस, और वह दिन जब हमारा अपना फिक्स ही उल्टा पड़ गया।

ट्रांसक्रिप्शन
विश्वसनीयता
इंजीनियरिंग
मीटिंग से एजेंट तक: बातचीत को ऐसे काम में बदलें जो आपका AI चला सके
Chris
Chris7 मिनट पढ़ें

मीटिंग से एजेंट तक: बातचीत को ऐसे काम में बदलें जो आपका AI चला सके

रुकावट मॉडल में नहीं है — रुकावट इसमें है कि आपके एजेंट्स तक असली कॉन्टेक्स्ट कैसे पहुँचे। यहाँ जानिए एजेंटिक टूलिंग में बेहतर होने का व्यावहारिक तरीका, और मीटिंग में जो तय हुआ उसे सीधे Claude Code, Codex या किसी भी एजेंट तक कैसे पहुँचाएँ।

AI एजेंट्स
एजेंटिक वर्कफ़्लो
मीटिंग नोट्स
Claude Code vs Codex: असली स्किल है एजेंट लिटरेसी
Chris
Chris11 मिनट पढ़ें

Claude Code vs Codex: असली स्किल है एजेंट लिटरेसी

हर कोई पूछता है कि कौन बेहतर है। यह गलत सवाल है। यहाँ जानिए हर टूल आपको किस चीज़ में बेहतर बनाता है — और 2026 की वो स्किल जो असल में मायने रखती है: एजेंट्स को स्टीयर करना, डिस्पैच करना और वेरिफाई करना।

AI कोडिंग एजेंट्स
Claude Code
Codex