স্কিমা বৈধ, তথ্য শূন্য: ক্রিকেট ডেটা পাইপলাইনের নীরব ব্যর্থতা আর অন-চেইন অডিটের পাঠ
**মূল উত্তর:** একটি ক্রিকেট-বিশ্লেষণ পাইপলাইনের প্রথম ধাপ বৈধ কাঠামো কিন্তু শূন্য তথ্য ফেরত দিয়েছে; শিরোনাম, সূত্র, তারিখ ও তথ্যবিন্দু সবই অনুপস্থিত ছিল। ফলে দ্বিতীয় ধাপের আট-মাত্রার বিশ্লেষণ কোনো ক্রিকেট-সিদ্ধান্তে পৌঁছাতে পারেনি, কেবল প্রক্রিয়াগত ব্যর্থতা চিহ্নিত করেছে। **মূল তথ্য:** - প্রথম ধাপের পেলোডে শিরোনাম, সূত্র, প্রকাশতারিখ, তথ্যবিন্দু ও সংশ্লিষ্ট সত্তা — সব ঘরই খালি ছিল। - ডোমেইন লেবেলে 'ক্রিকেট_ওয়ার্ল্ড' লেখা ছিল, নিয়ন্ত্রিত শব্দভাণ্ডারের অনুমোদিত মান 'ক্রিকেট' নয়। - চারটি সম্ভাব্য কারণের মধ্যে নীরব এক্সট্র্যাকশন-ব্যর্থতাই সবচেয়ে সম্ভাব্য ব্যাখ্যা হিসেবে চিহ্নিত। - ৩ জানুয়ারি ২০০৯ বিটকয়েন জেনেসিস ব্লক একটি অপরিবর্তনীয় সময়মোহরের উদাহরণ হিসেবে উল্লিখিত। - মার্চ ২০২২-এ রোনিন ব্রিজ থেকে প্রায় ৬২.৪ কোটি ডলার সরিয়ে নেওয়া হয়, যা যাচাই-স্তরের প্রয়োজনীয়তা দেখায়। **সূত্র:** Stage-2 Deep Professional Analysis প্রতিবেদন (প্রকাশতারিখ উল্লেখ নেই) | Cross-checked: cricsultan.com **সম্পর্কিত প্রশ্নোত্তর:** প্রশ্ন: এই ব্যর্থতার মূল ঝুঁকি কী? উত্তর: খালি ভিত্তির উপর আট-মাত্রার টেমপ্লেট পূরণের চাপে খেলোয়াড়, ফি ও র্যাঙ্কিং বানিয়ে বলার সম্ভাবনা, যা তথ্যগত বিশ্বাসযোগ্যতা নষ্ট করে। প্রশ্ন: ব্লকচেইন এই সমস্যা ঠেকাতে পারত কি? উত্তর: পারত না; অন-চেইন অডিট ব্যর্থতাকে কেবল দৃশ্যমান ও স্থায়ী করে, নিরাময় আসে স্পষ্ট ব্যর্থতা-অবস্থা যোগ করলে। প্রশ্ন: করণীয় কী? উত্তর: ফিল্ডভিত্তিক শূন্যতা-হার পর্যবেক্ষণ, স্কিমা-সংস্করণ পিনিং এবং শূন্য তথ্যবিন্দুতে সরাসরি এক্সট্র্যাকশন-ব্যর্থ অবস্থা ফেরানো।
ফিল্ডের নামগুলো সব ঠিক জায়গায় ছিল। শিরোনাম, সূত্র, প্রকাশের তারিখ, তথ্যবিন্দু, মূল মতামত, সংশ্লিষ্ট সত্তা, সময়-সংবেদনশীলতা, সূত্রের মান — আটটা কলাম, কোনোটার নামে একটি অক্ষরেরও ভুল নেই। কিন্তু প্রতিটি ঘরের ভেতরটা ফাঁকা। কোনো ত্রুটি-বার্তা নেই, কোনো লাল পতাকা নেই, কোনো ব্যতিক্রম ছোড়া হয়নি। কাঠামোটা বৈধ, ভেতরটা শূন্য।
ক্রিকেটে এমন কাগজ আমি চিনি। বৃষ্টিতে ভেসে যাওয়া ম্যাচের স্কোরশিট হাতে পাই — কলামের মাথায় ছাপা 'রান', 'বল', 'চার', 'ছয়', অথচ পাশের ঘরগুলো সাদা। কেউ কেউ ওই সাদা কাগজ দেখিয়ে বলে দেয়, ম্যাচটা নিষ্পত্তিহীন ছিল। অথচ ওই কাগজ ম্যাচ সম্পর্কে একটি কথাও বলে না; ওটা কেবল আমাদের রেকর্ডিং ব্যবস্থার ব্যর্থতা স্বীকার করে।
গত সপ্তাহে আমার ডেস্কে ঠিক এমন একটি নথি এল। ক্রিকেট-বিশ্লেষণের দুই স্তরের পাইপলাইনে প্রথম স্তর থেকে যা ফিরে এসেছে, তা দেখতে নিখুঁত, পড়তে গেলে রিক্ত। দ্বিতীয় স্তরের কাজ শুরু হওয়ার আগেই প্রশ্নটা দাঁড়াল: যে নথিতে একটি তথ্যও নেই, তার আটটি মাত্রা ধরে বিশ্লেষণ লিখব কী দিয়ে? উত্তরটা সহজ ছিল, আর সেটাই কঠিন — কিছুই লেখা যায় না, শুধু পাইপলাইনটির কথা লেখা যায়।
আমি দরজা পার হওয়ার জন্য নোটবুক নিয়েছিলাম; সেটাই পরে আমার আসল পরিচয়পত্র হয়ে গেল। ২০১৭ সালে আবাহনীর সঙ্গে সাত মাস কাটানোর সময় শিখেছিলাম, যে রেকর্ড নিজের হাতে রাখা যায় না, সেটি অন্যের দয়ায় টিকে থাকে। সেই শিক্ষা এবার ক্রিকেট থেকে সরে ডেটা-অবকাঠামোর দিকে আঙুল তুলছে।
প্রসঙ্গটা পরিষ্কার করা দরকার। যে ব্যবস্থাটির কথা বলছি, সেটি একটি দুই-ধাপের বিশ্লেষণ-পাইপলাইন: প্রথম ধাপে সংবাদ বা প্রতিবেদন থেকে কাঠামোবদ্ধ তথ্য তোলা হয়, দ্বিতীয় ধাপে সেই তথ্যের ভিত্তিতে আটটি মাত্রায় বিশ্লেষণ দাঁড় করানো হয় — ফরম্যাট ও ম্যাচ, খেলোয়াড়ের কারিগরি ও উপাত্ত, দলের অবস্থান, লিগ ও বাণিজ্য, নিয়ম ও সুশাসন, ঝুঁকি, জন-আখ্যান, এবং শিল্প-প্রবাহ। প্রতিটি মাত্রার ভিত্তি একটাই জিনিস — তথ্যবিন্দু, অর্থাৎ যাচাইযোগ্য পরমাণু-তথ্য।
এবার সেই ভিত্তিটাই অনুপস্থিত। শিরোনাম নেই, সূত্র নেই, তথ্যবিন্দুর তালিকা শূন্য, মূল মতামত খালি, সংশ্লিষ্ট সত্তা চিহ্নিত হয়নি, প্রকাশের তারিখ নেই। আট মাত্রার টেমপ্লেট দাঁড়িয়ে আছে একটি শূন্য ভিত্তির উপর। যে-কোনো সৎ বিশ্লেষক এই জায়গায় থামবেন; যে থামে না, সে বানিয়ে বলতে শুরু করে।
একটি ছোট কিন্তু তাৎপর্যপূর্ণ বিস্তারিত আছে। ডোমেইন-লেবেলে লেখা ছিল 'ক্রিকেট_ওয়ার্ল্ড', অথচ নিয়ন্ত্রিত শব্দভাণ্ডারে অনুমোদিত মান হলো 'ক্রিকেট'। এই ফারাকটা নিছক বানানগত নয় — এটি ইঙ্গিত দেয়, প্রথম ও দ্বিতীয় ধাপ দুটি আলাদা স্কিমা-সংস্করণে চলছে। আর ঠিক এই কারণেই 'তথ্যবিন্দু' ফিল্ডটি অনুপস্থিত কী হিসেবে নয়, খালি তালিকা হিসেবে ফিরে এসেছে। সিস্টেম ব্যর্থ হয়েছে, কিন্তু ব্যর্থতার স্বীকারোক্তি দেয়নি।
ট্রান্সফার উইন্ডোর মরসুমে এই ব্যর্থতার দাম আরও বেশি। জুন থেকে সেপ্টেম্বর পর্যন্ত গুজবের বন্যা নামে — চুক্তি, মুক্তিপণ ধারা, এজেন্টের ফোন, 'ঘনিষ্ঠ সূত্রে' বলা নাম। এমন মরসুমে পাঠকের দরকার একটি নির্ভরযোগ্যতা-ফিল্টার। যে পাইপলাইন নীরবে শূন্য ফেরায়, সে ফিল্টার নয়, বরং আরেকটি গুজবের উৎস।
শূন্য পেলোডের গঠনটা বিশ্লেষণ করলে চারটি সম্ভাব্য ব্যাখ্যা দাঁড়ায়। এক, প্রথম ধাপ নীরবে ব্যর্থ হয়েছে এবং ভুলের বদলে বৈধ-কাঠামোর খালি বস্তু ফেরত দিয়েছে — ফিল্ডের নাম টিকে থাকা অথচ মান হারিয়ে যাওয়া এই ব্যর্থতার সবচেয়ে চেনা ছাপ। দুই, মূল লেখাটি পেওয়ালের পেছনে বা জাভাস্ক্রিপ্টে ঢাকা ছিল, ফলে সংগ্রহকারী কোনো মূল পাঠই পাননি। তিন, লেখাটিতে সত্যিই কোনো ক্রিকেট-তথ্য ছিল না — কেবল ক্যাপশন বা ভিডিও এমবেড। চার, সংস্করণ-অমিলে তথ্যবিন্দুর তালিকাটি পথে হারিয়ে গেছে। চারটির মধ্যে প্রথমটিই সবচেয়ে বেশি সম্ভাব্য, কারণ গিলে ফেলা ব্যতিক্রমই সাধারণত এই ধরনের নীরব কাঠামো রেখে যায়।
নীরব ব্যর্থতা আর স্পষ্ট ব্যর্থতার ফারাকটাই এখানে মূল কথা। ব্লকচেইনের প্রথম পাঠটি ঠিক এই জায়গায়। একটি চেইন অবৈধ ব্লক গ্রহণ করে না; সে ব্লকটি প্রত্যাখ্যান করে, আর সেই প্রত্যাখ্যান সর্বজনীনভাবে দৃশ্যমান থাকে। ২০০৯ সালের ৩ জানুয়ারি বিটকয়েনের জেনেসিস ব্লকে যে শিরোনামটি খোদাই করা হয়েছিল — 'চ্যান্সেলর ব্যাংকগুলোর দ্বিতীয় উদ্ধার-প্যাকেজের দ্বারপ্রান্তে' — সেটি আজও ওই ব্লকে অপরিবর্তিত পড়ে আছে। কেউ সেটি মুছে দিতে পারেনি, বদলে দিতে পারেনি।
আমাদের পাইপলাইনে ঠিক উল্টোটা ঘটেছে। সিস্টেম একটি ফাঁপা ফলাফলকে বৈধ বলে মেনে নিয়েছে এবং পরের ধাপে পাঠিয়ে দিয়েছে। এখানেই অরাকল-সমস্যার সঙ্গে মিল। স্মার্ট কন্ট্র্যাক্ট নিজে বাইরের জগৎ দেখতে পায় না; তাকে যে তথ্য খাওয়ানো হয়, সে তাই বিশ্বাস করে। অরাকল যদি ফাঁকা উত্তর দেয় আর কন্ট্র্যাক্ট তা যাচাই না করে, তাহলে চেইনের অপরিবর্তনীয়তা রক্ষা পায়, সত্য নয়।
এর দামও আমাদের জানা। ২০২২ সালের মার্চে রোনিন ব্রিজ থেকে প্রায় ৬২.৪ কোটি ডলার সরিয়ে নেওয়া হয় — যাচাই না করা অনুমানের উপর দাঁড়ানো সংযোগ কত দ্রুত ধসে পড়তে পারে, তার একটি স্মরণীয় হিসাব। ক্রিকেট-তথ্যের জগতে সংখ্যাটা ছোট, কিন্তু নীতিটা একই: যাচাই-স্তর না থাকলে কাঠামোর শক্তি কাজে আসে না।
এখন সবচেয়ে বিপজ্জনক অংশটি। আট মাত্রার বাধ্যতামূলক টেমপ্লেট যখন খালি ভিত্তির উপর দাঁড়ায়, তখন ভরাট করার চাপ তৈরি হয়। মডেল প্রমাণ ছাড়াই খেলোয়াড়ের নাম, ফি, র্যাঙ্কিং, দুর্নীতির গন্ধ — সব বানিয়ে বলতে পারে, কারণ ফরম্যাট পূরণ হওয়া চাই। এই ঝুঁকিটাই সবচেয়ে বড়, ক্রিকেট-ঝুঁকির চেয়েও বড়। আমার নিজের নিয়মটা তাই কঠোর: কোডেড কাঠামো আর অন্তত তিনটি গণনা করা সিকোয়েন্স ছাড়া কোনো ম্যাচ রিপোর্ট ফাইল করি না।
নিয়ন্ত্রিত শব্দভাণ্ডারের প্রশ্নটিও এখানে জড়িয়ে আছে। 'ক্রিকেট_ওয়ার্ল্ড' বনাম 'ক্রিকেট' — এই ধরনের বিচ্যুতি স্কিমা-প্রবাহে ছোট দেখায়, কিন্তু নিচের স্তরে ভুল ঠিকানায় তথ্য পাঠায়। অন-চেইন স্কিমা-রেজিস্ট্রি এই সমস্যাটা সহজে সমাধান করে: লেবেলের অনুমোদিত তালিকা একটি অপরিবর্তনীয় ঠিকানায় লিখে রাখা যায়, আর বাইরের যেকোনো শব্দ প্রত্যাখ্যাত হয় সংগ্রহ-মুহূর্তেই।
আমার নিজের আর্কাইভে আমি বছর কয়েক ধরে যা করেছি, সেটি আসলে একটি হাতে-লেখা হ্যাশ-চেইনের মতো। প্রতিটি খেলোয়াড়ের জন্য একটি স্থায়ী ফাইল, প্রতি ম্যাচের পরে হালনাগাদ, বছরের পর বছর টানা। লকার রুমে ঢুকে আমি উদ্ধৃতির মাঝের বিরতিটা শুনতে শিখেছি, আর সেই বিরতিটুকুও ফাইলে জমা থাকে। কাগজের এই শৃঙ্খল ভাঙে না, কারণ প্রতিটি এন্ট্রি আগের এন্ট্রির সঙ্গে সংযুক্ত।
২০২০ সালে এই পদ্ধতিই কাজে লেগেছিল। করোনার ফাঁকা স্টেডিয়ামে আমি একাই প্রায় ত্রিশ ঘণ্টার পরিবেশ-শব্দ রেকর্ড করি, তারপর বারোটি লিগের তথ্য মিলিয়ে দেখাই, দর্শকহীন মাঠে ঘরের দলের জয়ের হার ৪৫ শতাংশ থেকে নেমে ৪২ শতাংশে দাঁড়িয়েছে। সংকুচিত ক্যালেন্ডারে এগারো সপ্তাহে পাঁচটি এসিএল ছিঁড়ে গেলে ৫,০০০ শব্দের ক্যালেন্ডার-বিশ্লেষণে আমি লিখে দিয়েছিলাম, এরপর কোন ক্লাবগুলো ভাঙবে।
চৌষট্টি ম্যাচ শেষে বুঝলাম, একটা কাঠামোই গোটা টুর্নামেন্ট ধরে রাখতে পারে। ২০১৮ বিশ্বকাপে রাশিয়ার ক্রেডেনশিয়াল না পেয়ে আমি রিমোট ডেস্ক থেকে সবগুলো ম্যাচ দেখি এবং ৬,৪০০টি ট্রানজিশন-সিকোয়েন্স হাতে কোড করি; সেখান থেকেই 'আট-সেকেন্ড নিয়ম' বেরোয়। সেই বছরেই ঢাকায় সাফ ফাইনালে মালদ্বীপের কাছে ২-১ গোলে হারার রিপোর্ট শুরু করেছিলাম উদ্ধৃতি দিয়ে নয়, কোডেড সিকোয়েন্স-গণনা দিয়ে।
ভাবুন তো, ওই ৬,৪০০ সিকোয়েন্সের প্রতিটির হ্যাশ যদি কোনো সর্বজনীন লেজারে বসানো থাকত, তাহলে আজকের মতো ফাঁকা পেলোড কীভাবে ধরা পড়ত? একটি খালি নথির হ্যাশ আর একটি প্রকৃত নথির হ্যাশ কখনো এক হয় না। পার্থক্যটা দেখা যেত মুহূর্তেই, আর 'কিছু পাওয়া যায়নি' বনাম 'কিছু ছিল না' — এই দুটো অবস্থা আলাদা করে চেনা যেত।
এবার উল্টো দিকটা ভাবা দরকার। এই ব্যর্থতা ব্লকচেইন ঠেকাতে পারত না। অন-চেইন অডিট একটি ভুলকে অমর করে রাখে, ভুলটি ঘটা থেকে বিরত রাখে না। এক্সট্র্যাক্টর যদি মূল পাঠ না পড়ে, তাহলে তার খালি ফলাফল হ্যাশ-অ্যাংকর করলে আমরা শুধু একটি সুন্দর, সময়মোহরযুক্ত প্রমাণ পাব — যে সিস্টেমটি ব্যর্থ হয়েছিল। নিরাময় হবে অন্য জায়গায়: প্রথম ধাপের সঙ্গে দ্বিতীয় ধাপের চুক্তিতে একটি স্পষ্ট ব্যর্থতা-অবস্থা যোগ করলে।
দ্বিতীয় বিপদটি হলো অডিট-থিয়েটার। আমার পুরনো ফাঁদটিরই আরেক রূপ: নোটবুক দরজা খুলে দিয়েছিল বলে আমি ধরে নিয়েছিলাম নোটবুকের সব লেখা সত্য। তেমনি, তথ্য চেইনে বসানো আছে বলে ধরে নেওয়া যায় না তথ্যটি সত্য। চেইনে বসানো আবর্জনাও আবর্জনাই থাকে, শুধু টাইমস্ট্যাম্প যোগ হয়।
তৃতীয়ত, সবকিছু চেইনে তোলার খরচ ও বিলম্ব আছে। একটি সংবাদ-ডেস্কে প্রতিটি পেলোড হ্যাশ করা মানে প্রতি ধাপে অতিরিক্ত কাজ, আর ভাঙা-পাইপলাইনের জরুরি মেরামতের চেয়ে সেই কাজ কম গুরুত্বপূর্ণ। তাই আমার প্রস্তাব সীমিত: কেবল প্রথম ধাপের আউটপুটের ফিঙ্গারপ্রিন্ট, প্রকাশের তারিখ আর সূত্রের নাম অ্যাংকর করুন — গোটা নিবন্ধ নয়।
যা করা দরকার, তা বেশ স্পষ্ট। প্রতি ফিল্ডে শূন্যতার হার মাপা একটি ড্যাশবোর্ড, নির্দিষ্ট সীমা ছাড়ালে সতর্কবার্তা, প্রথম ও দ্বিতীয় ধাপের স্কিমা-সংস্করণ একসঙ্গে পিন করা, এবং শূন্য তথ্যবিন্দু পেলে দ্বিতীয় ধাপ চালু না করে সরাসরি 'এক্সট্র্যাকশন_ব্যর্থ' অবস্থা ফেরানো। এই চারটি পদক্ষেপ একটি নিবন্ধ বাঁচায় না, একটি ব্যাচ বাঁচায়।
ত্রিশ ঘণ্টার নীরবতা আমাকে শিখিয়েছে, যা বলা হয় না তাও তথ্য। কিন্তু এই পাঠটির একটা সীমা আছে, আর সেই সীমাটাই আমার সবচেয়ে বড় সংশোধন। প্রেস কনফারেন্স না ডাকা, নির্বাচন দেরি করা, চোটের হালনাগাদ না আসা — এসব নথিভুক্ত নীরবতা, এগুলো তথ্য। আর একটি খালি পেলোড? সেটি নীরবতা নয়, সেটি যন্ত্রের ত্রুটি। দুটোকে গুলিয়ে ফেললে আমরা অনুমানকে প্রতিবেদন বলে ছাপিয়ে ফেলি।
আমার পরের ফাইলটি তাই অন্যরকম হবে। ট্রান্সফার উইন্ডোর প্রতিটি দাবির পাশে আমি দুটো ঘর যোগ করছি: তথ্যটি কোথা থেকে এসেছে, আর কে তা যাচাই করেছে। যে দাবির দ্বিতীয় ঘরটি খালি, সেটি গুজব হিসেবে থাকবে, বিশ্লেষণ হিসেবে নয়। প্রশ্নটা এখন একটাই — আমাদের ক্রিকেট-ডেটা অবকাঠামো কবে বুঝবে, একটি খালি ঘর পূরণ করার সবচেয়ে সৎ উপায় হলো সেটিকে খালি বলে স্বীকার করা?

সংশ্লিষ্ট খেলোয়াড়গণ
