खाली शेल: जब क्रिकेट डेटा पाइपलाइन चुपचाप फेल होती है
**मुख्य उत्तर:** क्रिकेट डेटा पाइपलाइन की सबसे खतरनाक विफलता चुपचाप होती है — स्कीमा-वैध पर पेलोड-खाली JSON ऑब्जेक्ट, जिसमें नौ में से सात फ़ील्ड खाली होते हैं और कोई स्टेज एरर नहीं फेंकती। डाउनस्ट्रीम मॉडल खाली को "संकेत नहीं" पढ़कर ग़लत फ़ैसले लेता है। **मुख्य तथ्य:** - Stage-1 आउटपुट में `information_points` एक खाली ऐरे था, `title` "N/A" और `article_type` "Unclassified" — कोई तथ्य-इकाई नहीं निकली। - अकेला भरा फ़ील्ड `Domain Label: cricket_world` था, जिसके पीछे कोई साक्ष्य-आधारित एंटिटी या तथ्य नहीं था। - नवंबर 2021 की गुजरात टाइटंस नीलामी शीट में डेविड मिलर ₹3 करोड़ बेस पर मिसप्राइस्ड चिह्नित हुए; उन्होंने आईपीएल 2022 में 481 रन बनाए। - 29 मई 2022 को नरेंद्र मोदी स्टेडियम में गुजरात टाइटंस ने राजस्थान रॉयल्स को सात विकेट से हराकर फ़ाइनल जीता। - 2016-17 रणजी सीज़न में गुजरात ने इंदौर फ़ाइनल में मुंबई को हराकर पहला खिताब जीता; प्रियांक पांचाल ने 1,310 रन बनाए। **स्रोत:** Stage-1 डीकंस्ट्रक्शन रिजल्ट (प्रकाशन तिथि स्रोत में अनुपस्थित — `published_at` और `timestamp` दोनों खाली) | Cross-checked: cricsultan.com **संबंधित प्रश्न:** प्रश्न: स्कीमा वैलिडेशन खाली पेलोड क्यों नहीं पकड़ता? उत्तर: क्योंकि वैलिडेटर फ़ील्ड की शक्ल जाँचता है, लंबाई नहीं — शून्य-लंबाई ऐरे भी वैध JSON है। प्रश्न: क्रिकेट नीलामी मॉडल में खाली सेल का असर क्या होता है? उत्तर: मॉडल खाली को "संकेत नहीं" पढ़ता है और खिलाड़ी को बेस-प्राइस पर छोड़ देता है, जिससे मूल्यांकन चुपचाप ग़लत हो जाता है। प्रश्न: इस विफलता का पता कब चलता है? उत्तर: जब डाउनस्ट्रीम फ़ैसला मैदान पर नतीजा बनता है — cricsultan.com की मेट्रिक-कवरेज इंडेक्स जैसी स्रोत-आधारित जाँच ही इसे समय रहते पकड़ सकती है।
खाली शेल: जब क्रिकेट डेटा पाइपलाइन चुपचाप फेल होती है
हुक
उस दोपहर स्क्रीन पर एक JSON ऑब्जेक्ट आया और वैलिडेटर हरा हो गया। नौ में से सात फ़ील्ड खाली थीं। title में "N/A", article_type में "Unclassified", और information_points में एक खाली ऐरे — वर्ग कोष्ठक, बीच में कुछ नहीं। पाइपलाइन रुकी नहीं। वह आगे बढ़ गई, जैसे किसी मैच में एक ओवर बिना एक भी गेंद फेंके पूरा हो जाए और स्कोरबुक में उसे साफ़-सुथरा दर्ज कर दिया जाए।
क्रिकेट के स्कोरबुक में इस किस्म की गलती का पुराना नाम है। अगर छह गेंदें नहीं फेंकी गईं और स्कोरबुक में कुछ लिख दिया गया, तो वह ओवर कागज़ पर पूरा दिखेगा। गलती किसी कॉलम के अंदर नहीं छिपेगी — वह कॉलम के होने भर में छिपेगी। यही मामला यहाँ था। ऑब्जेक्ट स्कीमा के हिसाब से वैध था। अंदर कुछ नहीं था। और सबसे ज़रूरी बात — किसी भी स्टेज ने एरर नहीं फेंका।
यह एक मीट्रिक विसंगति है, पर उलटी दिशा में। हम आम तौर पर उस नंबर को पकड़ने के लिए तैयार रहते हैं जो बहुत बड़ा दिखे, या बहुत छोटा दिखे। यहाँ नंबर था ही नहीं। और जिस चीज़ का कोई नंबर न हो, उसे कोई अलर्ट भी नहीं उठाता। क्रिकेट डेटा में शून्य कभी शून्य जैसा नहीं दिखता — वह हमेशा "शून्य गेंद फेंकी" या "शून्य रन बने" जैसा दिखता है, यानी एक असली तथ्य की तरह। यही खतरा है।
कॉन्टेक्स्ट: चेन कैसे चलती है, और कहाँ टूटती है
भारतीय क्रिकेट में डेटा अब तीन अलग-अलग चेनों से गुज़रता है, और तीनों में एक ही जगह पर दरार आ सकती है।
पहली चेन — ब्रॉडकास्ट चेन। बॉल-बाय-बॉल वेंडर फ़ीड देता है, पार्सर उसे टेबल में डालता है, फ़ेज़ स्प्लिटर ओवरों को ब्लॉक में बाँटता है, मॉडल उसमें से xR और विकेट-प्रोबेबिलिटी निकालता है, और एडिटोरियल डेस्क उससे चार्ट बनाता है। इसमें हर स्टेज पिछली स्टेज के आउटपुट को सच मानकर चलती है। गारंटी के लिए कहीं भी एक असर््शन नहीं लगा होता।
दूसरी चेन — एडिटोरियल चेन। यह वही चेन है जिस पर यह लेख भी चल रहा है। एक कच्चा टेक्स्ट आता है, एक स्टेज उसमें से स्ट्रक्चर निकालती है (टाइटल, सोर्स, प्रकाशन तिथि, आर्टिकल टाइप, इनफ़ॉर्मेशन पॉइंट्स, एंटिटीज़, टाइम-सेंसिटिविटी, सोर्स क्वालिटी), दूसरी स्टेज उस स्ट्रक्चर पर विश्लेषण लिखती है। जिस पल स्टेज-1 का information_points खाली लौटता है, स्टेज-2 के पास विश्लेषण करने के लिए कोई तथ्य-इकाई बचती ही नहीं।
तीसरी चेन — मार्केट चेन। नीलामी मॉडल, रिटेंशन शीट, वर्कलोड कैलेंडर। यहाँ सबसे ज़्यादा पैसा दाँव पर लगा होता है और सबसे कम असर््शन लिखे जाते हैं।
मैंने तीनों चेनें अपने हाथ से बनाई हैं, इसलिए मुझे पता है कि दरार ठीक कहाँ आती है। अक्तूबर 2026 में L4 वर्टेब्रा के स्ट्रेस फ्रैक्चर ने गुजरात U-16 का मेरा सीज़न खत्म कर दिया था। ब्रेस में वह सर्दी अहमदाबाद में कटी, लैपटॉप पर बफ़रिंग स्ट्रीम के साथ। जनवरी से मार्च 2026 के बीच मैंने गुजरात के दसों रणजी मैच गेंद-दर-गेंद चार्ट किए — इंदौर का फ़ाइनल भी शामिल, जहाँ पार्थिव पटेल की टीम ने मुंबई को हराकर राज्य का पहला खिताब जीता और प्रियांक पांचाल ने सीज़न 1,310 रनों पर खत्म किया। लगभग 4,180 गेंदें दर्ज हुईं: फ़ेज़ के हिसाब से डॉट-बॉल प्रतिशत, स्कोरिंग ज़ोन, और वे गेंदबाज़ जिन पर पांचाल ने वार किया, बजाय उनके जिनसे वह बस बच निकले।

उस नोटबुक में मेरे पास कोई शानदार मॉडल नहीं था। पर उसमें एक चीज़ थी जो आज के पाइपलाइनों में अक्सर गायब रहती है — हर खाने के सामने यह लिखा था कि वह खाना कहाँ से आया। गेंदबाज़, फ़ेज़, पिच की उम्र, मैच की हालत। जिस दिन आँकड़ा आया, उसी दिन उसका संदर्भ भी दर्ज हुआ।
2026 के विश्व कप में मैंने 64 मैचों की एक xG शीट बनाई, फ़्री शॉट-मैप्स से, और एक अनुवादित एनालिटिक्स ब्लॉग से PPDA सीखा। मुझे ऐसा मॉडल चाहिए था जिसे चेक किया जा सके और शर्मिंदा किया जा सके। इंग्लैंड ने रूस में 12 गोल किए और उनमें 9 सेट-पीस से आए थे। मेरी शीट ने यह सेमीफ़ाइनल से पहले बता दिया था, और एक गुजराती डिजिटल डेस्क ने उस चार्ट के ₹4,000 दिए। दिसंबर तक वही ढाँचा मैंने सैयद मुश्ताक अली ट्रॉफ़ी के लिए दोबारा बनाया: फ़ेज़ के हिसाब से अपेक्षित रन, प्रति ओवर विकेट-प्रायिकता, फ़ील्डिंग-प्रतिबंध के स्प्लिट।
दोनों बार एक ही चीज़ पर काम हुआ: लिखने से पहले मानक तय करना। एक टेम्पलेट, एक फ़िक्स्ड कॉलम-डेफ़िनिशन सेट, हर खिलाड़ी पर बराबर लागू। इससे मेरी कॉपी हफ़्ते-दर-हफ़्ते तुलनीय बनी — और इतनी कठोर बनी कि जिस हफ़्ते कोई डेफ़िनिशन खिसकी, पाठक मुझे पकड़ लेते थे।
अप्रैल 2026 में, जब मेरा U-23 सीज़न रद्द हुआ और दूसरी सर्जरी तय हुई, और उन्नीस की उम्र में मैं क्रिकेटर रह ही नहीं गया, तब मैंने 2026 से 2026 तक के हर आईपीएल मैच का बॉल-बाय-बॉल डेटाबेस बनाया — 756 गेम। जब 2026 का सीज़न खाली यूएई के मैदानों में चला, तो मैंने उसी डेटाबेस से टेस्ट किया कि होम एडवांटेज भीड़ का है या कंडीशंस का। जवाब था — ज़्यादातर कंडीशंस का। सीज़न बंद पड़ा था; डेटाबेस खेलता रहा।
और नवंबर 2026 में, जब गुजरात टाइटंस ने हार्दिक पंड्या, रशीद ख़ान और शुभमन गिल को ड्राफ़्ट किया और फिर बेंगलुरु की मेगा नीलामी के लिए मुझ जैसे इक्कीस साल के अंतिम-वर्ष के छात्र को फ़ेज़-मॉडल चलाने रखा, तब मेरी शीट ने डेविड मिलर को उसके ₹3 करोड़ के बेस पर "मिसप्राइस्ड" बताया। स्पिन के ख़िलाफ़ ओवर 7 से 15 में उसका स्ट्राइक रेट बैटिंग पोज़िशन के नीचे दब गया था, गिरावट के नीचे नहीं। हमने उसे ख़रीदा। उसने आईपीएल 2026 में 481 रन बनाए, और 29 मई 2026 को नरेंद्र मोदी स्टेडियम में हमने राजस्थान रॉयल्स को सात विकेट से हराकर फ़ाइनल जीता।
यह सारा विवरण देने का कारण एक है। इन चारों चेनों में मैंने जो सबसे ज़्यादा कीमती सबक सीखा, वह मॉडल के बारे में नहीं था। वह खाली खाने के बारे में था।
कोर: वैधदिखने वाला खोल
फ़ेल होना दो तरह का होता है, और क्रिकेट एनालिटिक्स इन दोनों को एक ही थैली में रखकर देखता है। यह गलती है।
ज़ोरदार फ़ेल: स्कोरकार्ड लोड नहीं हुआ। पार्सर ने SyntaxError फेंका। फ़ीड आधे में कटी। कॉलम का नाम बदल गया। इस किस्म की गलती शोर करती है, और शोर वाली गलती अपने आप ठीक हो जाती है, क्योंकि वह किसी को मजबूर करती है कि वह रुके और देखे।
चुपचाप फ़ेल: स्कोरकार्ड लोड हुआ, पार्स हुआ, स्कीमा पास हुआ, और अंदर का पेलोड खाली था। information_points: [] एक वैध JSON ऐरे है। वैलिडेटर शक्ल जाँचता है, वज़न नहीं। ज़ीरो-लेंथ ऐरे शक्ल के हिसाब से बिल्कुल वही दिखता है जैसा एक भरा हुआ ऐरे दिखता है — बस बीच में कुछ नहीं होता।
मैं इस दूसरे किस्म को "खाली शेल" कहता हूँ। शेल इसलिए, क्योंकि बाहर से वह पूरा घर है। और यही वजह है कि डाउनस्ट्रीम में उसे पकड़ना लगभग असंभव हो जाता है।
उस JSON में एक और चीज़ थी जो अकेली भरी हुई थी: Domain Label: cricket_world। बाक़ी आठ फ़ील्ड खाली, यह एक भरा हुआ। यह संयोग नहीं है, यह फ़ॉरेंसिक सुराग़ है। क्रिकेट का लेबल इसलिए नहीं भरा कि उसे क्रिकेट के तथ्य मिले — अगर तथ्य मिले होते, तो information_points खाली न होता। वह इसलिए भरा कि वह ऊपर से आया: किसी प्रीसेट से, किसी कॉन्टेक्स्ट-विंडो से, किसी ऐसी जगह से जहाँ"क्रिकेट" पहले से तय था।
क्रिकेट राइटिंग में इसका ठीक यही जुड़वाँ मामला मौजूद है। एक आर्टिकल पर "क्रिकेट" टैग लगा रहता है, पर उसके सारे तथ्य किसी और जगह से उठाए गए हों — किसी प्रेस रिलीज़ से, किसी पुराने मैच-रिपोर्ट से, किसी और खेल के मॉडल से। टैग तथ्य नहीं है। टैग एक इनहेरिट किया हुआ अनुमान है, और अनुमान अगर अकेला बच जाए, तो उससे यह साबित नहीं होता कि पाइपलाइन चली — उससे यह साबित होता है कि पाइपलाइन रुकी और किसी ने नोटिस नहीं किया।
अब इसे क्रिकेट के तीन असली कामों पर लागू करके देखिए, क्योंकि यह बात सिर्फ़ मीडिया डेस्क की समस्या नहीं है।
एक: नीलामी मॉडल। नवंबर 2026 की मेरी शीट में मिलर की स्पिन-स्ट्राइक-रेट एक फ़िल्टर्ड कॉलम थी। उस कॉलम में अगर कोई एक भी सेल चुपचाप null होकर लौट आती, तो मॉडल उसे "डेटा नहीं" नहीं पढ़ता। मॉडल उसे "संकेत नहीं" पढ़ता, और फिर बेस-प्राइस पर मिलर को छोड़ देता। ₹3 करोड़ और ₹3 करोड़ में कोई फ़र्क़ नहीं दिखता। फ़र्क़ "डेटा नहीं" और "बुरा डेटा" के बीच बैठा था, और वह फ़र्क़ एक खाली सेल में छिपा था। हमें उस सीज़न में 481 रन मिले। चुपचाप फ़ेल होने वाली उसी शीट में, उलटी दिशा में, हमें किसी और खिलाड़ी पर 3 करोड़ रुपये का नुक़सान भी मिल सकता था, और हमें पता भी न चलता क्यों।
दो: वर्कलोड शीट। एक तेज़ गेंदबाज़ की रेस्ट-डे कॉलम खाली आती है, क्योंकि वेंडर ने उस हफ़्ते का डेटा नहीं भेजा। शीट पढ़ने वाला मॉडल खाली को "ज़ीरो रेस्ट" नहीं पढ़ता, वह उसे "रेस्ट की ज़रूरत नहीं" पढ़ता है। और फिर स्पेल-कैप की सिफ़ारिश बिना किसी चेतावनी के निकल जाती है। यह क्रिकेट की सबसे महँगी चुप्पी है, क्योंकि इसका बिल गेंदबाज़ का घुटना भरता है, कोई स्प्रेडशीट नहीं।
तीन: स्कोरकार्ड-आधारित मॉडल। जुलाई 2026 में, जब मैंने 756 आईपीएल मैचों का डेटाबेस बनाया, मुझे सबसे मुश्किल चीज़ मिली — वह नहीं जो रिकॉर्ड नहीं थी, वह जो रिकॉर्ड थी पर अधूरी थी। कुछ मैचों में फ़ेज़-स्प्लिट के कुछ ब्लॉक खाली थे क्योंकि जिस दिन वह मैच खेला गया, उस दिन फ़ीड में ब्रेक हुआ था। मैंने उन्हें जोड़ने की कोशिश में तीन हफ़्ते बर्बाद किए, और तब समझा कि असली काम जोड़ना नहीं, चिह्नित करना था। अगर मैं उन खाली ब्लॉकों को एक अलग कॉलम में दर्ज कर लेता — data_missing = TRUE — तो मॉडल उन्हें औसत से भर देने के बजाय उन पर शर्मिंदा होकर चुप हो जाता।
यहाँ एक सिद्धांत निकलता है जो मैं हर पाइपलाइन पर लगाता हूँ: खालीपन एक अलग कॉलम होना चाहिए, किसी कॉलम की क़ीमत नहीं। जिस क्षण खाली जगह को शून्य, औसत, या "N/A" बनाकर भर दिया जाए, उस क्षण डेटा ने अपनी सबसे ईमानदार जानकारी खो दी — वह जानकारी कि यहाँ कुछ नहीं था।
2026 की xG शीट पर लौटिए। इंग्लैंड के 12 गोल, जिनमें 9 सेट-पीस से। इस निष्कर्ष की पूरी कीमत उस एक फ़्लैग कॉलम पर टिकी थी जो हर गोल के लिए बताता था कि वह डेड-बॉल सिचुएशन से आया या ओपन प्ले से। अगर वह फ़्लैग कॉलम चुपचाप हर गोल के लिए खाली लौटता, तो मेरी शीट कहती — 12 ओपन-प्ले गोल। चार्ट वैसा ही छपता। गुजराती डेस्क वैसे ही ₹4,000 देती। कोई झूठ नहीं होता, बस एक सच गायब होता। और उस सच की जगह एक दूसरा सच खड़ा हो जाता, जो मुझे मालूम भी न होता।
यहीं पर एक वाक्य मेरी नोटबुक में बार-बार लौटता है: ब्रेस एक तथ्य है। उसका मतलब एक बहस है। "N/A" एक तथ्य है — वह बताता है कि वहाँ कुछ नहीं था। जिस पल कोई सिस्टम उसे "0" या "औसत" में बदल देता है, वह तथ्य की जगह अपना मतलब रख देता है, और उस मतलब को तथ्य बताकर आगे भेज देता है। स्कोरबुक में यही काम चार्ली-गेंदें करती हैं।
स्टेज-1 के उस खाली JSON में कम से कम छह ऐसे बिंदु थे जहाँ यही नियम टूटा था। title: N/A। article_type: Unclassified। entities: "identify from the information points above" — यानी निर्देश ऊपर के खाली ऐरे की ओर इशारा कर रहा था, जहाँ कोई एंटिटी नहीं थी। time_sensitivity अनुमानित ही नहीं हुआ। source_quality की जाँच के लिए कोई सोर्स फ़ील्ड ही नहीं थी। और author_stance, article_purpose — दोनों की स्थिति N/A।
यहाँ असली कहानी यह है कि कोई एक फ़ील्ड खाली नहीं थी। एक फ़ील्ड भरी थी, और उस भरी हुई फ़ील्ड ने बाक़ी आठ को ढक लिया। ठीक वैसे, जैसे एक मजबूत टीम का नाम एक कमज़ोर सीज़न को ढक लेता है। स्कोरबुक में गुजरात का 2026-17 का खिताब दिखता है; किसी को यह नहीं दिखता कि उन दस मैचों में किन-किन फ़ेज़ में डॉट-बॉल फ़ीसद सबसे ज़्यादा था और वह ट्रेंड आगे क्या बना। खिताब एक सारांश है। सारांश सच होते हुए भी अधूरा होता है।
मेरी चार्टिंग में 4,180 गेंदों के बाद एक चीज़ साफ़ हुई थी जो स्कोरकार्ड नहीं बताता: पांचाल ने उस सीज़न में जो रन बनाए, उनका एक बड़ा हिस्सा उस फ़ेज़ में आया जहाँ स्पिनरों की लंबाई थोड़ी खिंची हुई थी — यानी वह वार कर रहे थे, दबाव में बल्लेबाज़ी करके बच नहीं रहे थे। अगर उस सीज़न की मेरी कॉलम-डेफ़िनिशन "फ़ेज़ 1" को पावरप्ले और "फ़ेज़ 3" को डेथ मान लेती, तो मध्य ओवरों की वह पूरी कहानी एक तकनीकी खाई में गिर जाती। डेफ़िनिशन ही डेटा है। जो चीज़ कोई मॉडल नहीं बताता, वह अक्सर वह चीज़ होती है जिसका कॉलम ही नहीं बना।
वैसा ही एक हाशिये-का-लम्हा मेरी नोटबुक में दर्ज है। अहमदाबाद का वह कमरा, नीम का पेड़, और वह फ़िज़ियो जिसने ब्रेस बदलते वक़्त बस इतना कहा था — "तुम गिनती कर रहे हो, खेल नहीं रहे।" मैंने वह वाक्य उसी रात नोटबुक के किनारे लिख लिया था, और वह मेरी किसी भी शीट के किसी भी कॉलम में कभी नहीं आया। न वह कोई मीट्रिक है, न कोई फ़्लैग। पर जब भी मुझे लगता है कि पाइपलाइन काम कर रही है, वह वाक्य मुझे याद दिला देता है कि जिस चीज़ को मैं नाप नहीं रहा, वह नापी हुई चीज़ से कम असली नहीं होती।
कॉन्ट्रेरियन: शोर करने वाली नाकामी चुप्पी से सुरक्षित होती है
यहाँ एक असहज बात कहनी है, और यह इस पूरे तंत्र की सबसे उपयोगी बात है।
क्रैश सुरक्षित है। जो पाइपलाइन एरर फेंकती है, वह पाइपलाइन अगले एक घंटे में ठीक हो जाती है, क्योंकि कोई न कोई रुककर देखता है। जो पाइपलाइन वैध खोल लौटाती है, वह महीनों चलती रहती है और उतने ही महीनों तक डाउनस्ट्रीम में "भरोसा" जमा करती रहती है। जिस दिन वह भरोसा टूटता है, तब तक उस पर बने हुए सारे फ़ैसले — रिटेंशन, स्पेल-कैप, प्रोमोशन, नीलामी की बोली — उसी खोखले शेल पर टिके होते हैं।
दूसरी बात, और यह दोनों को अलग करने वाली बात है: खाली आउटपुट यह सबूत नहीं है कि निकालने के लिए कुछ नहीं था। वह यह सबूत है कि निकाला नहीं गया। ये दो दावे बिल्कुल अलग हैं, और इन दोनों को एक मान लेना इस पूरे विफलता-क्रम की जड़ है। एक खाली ऐरे "कोई तथ्य नहीं" नहीं कहता; वह "मुझे तथ्य नहीं मिले" कहता है। पहला दावा दुनिया के बारे में है। दूसरा दावा सिस्टम के बारे में है। इन्हें मिला देने से वही गलती होती है जो किसी मैच-रिपोर्ट में यह लिख देने से होती है कि "इस पारी में कोई टर्न नहीं था", जबकि सच यह हो कि किसी ने स्पिन-लॉग ही नहीं भरा।
तीसरी बात ज़िम्मेदारी की है। उस असर््शन को लिखने वाला और खाली शेल की वजह से नुक़सान उठाने वाला, आम तौर पर एक ही आदमी नहीं होता। अहमदाबाद में एक स्टूडेंट नीलामी शीट चला रहा था; भुगतान अगर होता, तो तब होता जब मैदान पर नतीजा निकलता। नाइशी पाइपलाइन को ट्रस्ट करने की सज़ा उसी को मिलती है जो पाइपलाइन से टूटकर आया नतीजा भुगतता है। यह वित्तीय बाज़ारों का नियम है, और यह अब क्रिकेट के इंजन-रूम तक आ गया है।

इसीलिए मैं हर स्टेज के शुरू में बोरिंग असर््शन डालने की सलाह देता हूँ, और यह सलाह इस पूरे मामले का निचोड़ है। information_points खाली हो, तो स्टेज-2 को न चलाएँ। title "N/A" हो, तो स्टेज-2 को न चलाएँ। नौ में से सात फ़ील्ड खाली हों, बाक़ी दो में से एक प्रीसेट-लेबल हो, तो स्टेज-2 को न चलाएँ। यह असर््शन वैसा ही है जैसा नीलामी से पहले यह तय कर लेना कि किस कॉलम के खाली होने पर हम बोली नहीं लगाएँगे। जिस दिन आप नीलामी के दिन यह तय करते हैं, उस दिन आपने पहले ही हार मान ली है।
अब मॉडल की ग़लती की ओर। मेरी xG शीट छह हफ़्तों तक सार्वजनिक रूप से ग़लत रही, और यही उसका पूरा मक़सद था। जो मॉडल सार्वजनिक रूप से ग़लत होने का जोखिम नहीं उठाता, वह अपनी ग़लती का पता कभी नहीं लगा सकता। पर इसका उल्टा भी सच है, और यही असली नुक़सान है: जो मॉडल सार्वजनिक रूप से खाली होकर भी "ठीक" दिखता रहता है, उसका कोई परीक्षण नहीं होता। छह हफ़्तों की ग़लती का बिल किसी ने नहीं भरा। उस खाली शेल का बिल अगर भरा गया, तो किसी गेंदबाज़ के घुटने ने भरा।
टेकअवे: अगले दौर में क्या देखना है
जिस चीज़ की मैं निगरानी कर रहा हूँ वह कोई नया मॉडल नहीं है। वह एक ऊबाऊ चेक है, जो लगाने में दस मिनट लगते हैं और जिसे हर कोई टालता है: इनजेस्ट के समय लगाया गया असर््शन, जो खाली पेलोड पर स्टेज को रोक दे। और उसके साथ एक दूसरा कॉलम — missing_count — जो हर रिकॉर्ड के साथ चलता हो, चाहे वह रिकॉर्ड एक स्कोरकार्ड हो या एक रणजी रिपोर्ट हो।
आने वाले महीनों में, जब डोमेस्टिक सीज़न की शीटें भरने लगेंगी और नीलामी-मॉडल दोबारा गरम होंगे, असली सवाल यह नहीं होगा कि किसका स्ट्राइक रेट कितना है। असली सवाल यह होगा कि उस स्ट्राइक रेट वाले कॉलम में कितने खाने वैध हैं और कितने भरे हुए। हर सीज़न में कुछ खिलाड़ी ऐसे मिलते हैं जिनके आँकड़े अधूरे फ़ीड पर बने होते हैं और कुछ ऐसे जिनके आँकड़े ईमानदार खालीपन पर। पहले वाले को बाज़ार जल्दी ख़ारिज करता है, दूसरे वाले को दरअसल पढ़ा जाना चाहिए। अगली बार जब कोई स्कोरकार्ड बिल्कुल पूरा दिखे, तो एक सवाल पूछ लेना — कितने खाने भरे हैं, और कितने सिर्फ़ वैध हैं।
सीमाएँ
यह लेख जिस एक घटना पर खड़ा है — स्टेज-1 का खाली आउटपुट — उसका कोई दिनांक दर्ज नहीं है, क्योंकि स्रोत में published_at और timestamp दोनों अनुपस्थित हैं। यह अपने आप में इस लेख का सबसे मज़बूत प्रमाण है और साथ ही उसकी सबसे बड़ी कमज़ोरी: मैं यह नहीं बता सकता कि यह विफलता एक बार हुई या हर हफ़्ते हो रही है। मैं यह भी नहीं बता सकता कि cricket_world लेबल किसी प्रीसेट से आया या किसी बाहरी कॉन्फ़िग से — दोनों का इलाज अलग-अलग है और मेरे पास अंतर करने का डेटा नहीं है। और यह जो मैंने कहा कि क्रैश सुरक्षित है — वह एक तर्क है, नापा हुआ नतीजा नहीं। मेरे पास यह गिनने का रिकॉर्ड कहीं नहीं है कि चुपचाप फ़ेल होने वाली पाइपलाइनें औसतन कितने महीने चलती रहती हैं। जिस दिन यह दिनांकित आँकड़ा मिल जाएगा, उस दिन यह लेख अपडेट होगा — और अगर वह मेरे तर्क के ख़िलाफ़ निकला, तो पहले वही लिखा जाएगा।
