ডেভেলপাররা এখন স্টেট ফাইল ওভাররাইট হওয়া বা লুকানো ফাইল সংঘর্ষের ভয় ছাড়াই একসাথে একাধিক কোডিং-এজেন্ট সেশন চালু করতে পারেন। একটি অ্যাডভাইজরি (advisory) “share-nothing” প্যাটার্ন প্রতিটি এজেন্টের ওয়ার্কস্পেসকে আলাদা করে রাখে এবং সম্ভাব্য সংঘর্ষ সম্পর্কে সতর্ক করে। এই পদ্ধতিটি হার্ড লক (hard locks)-এর পরিবর্তে একটি লাইটওয়েট রেজিস্ট্রি ব্যবহার করে যা কাজ শুরু হওয়ার আগেই ওভারল্যাপিং কাজগুলোকে চিহ্নিত করে, ফলে কোনো সেশন ক্র্যাশ করলেও পাইপলাইন সচল থাকে।
কেন প্যারালাল এজেন্টরা সমস্যা তৈরি করে
একটি সিঙ্গেল রিপোজিটরিতে একাধিক অটোমেটেড কোডিং অ্যাসিস্ট্যান্ট চালানো কোড জেনারেশন, টেস্টিং বা রিফ্যাক্টরিংয়ের গতি বাড়িয়ে দেয়। বাস্তবে, এতে সাথে সাথে দুটি সমস্যা দেখা দেয়।
- State corruption – দুটি এজেন্ট একই স্টেট ফাইলে লিখছে; পরেরটি আগেরটিকে ওভাররাইট করে দেয়, ফলে কাজের অগ্রগতি মুছে যায়।
- File collision – দুটি এজেন্ট একে অপরের অজান্তেই একই সোর্স ফাইল এডিট করছে। এই সংঘর্ষটি পরে দেখা দেয়, যখন একটি diff ভিন্নধর্মী পরিবর্তনগুলো প্রদর্শন করে।
উভয় সমস্যাই ডেভেলপারদের সময় নষ্ট করে এবং শনাক্ত করা কঠিন এমন বাগ (bug) তৈরি করতে পারে।
The “share nothing” rule
মূল ধারণাটি সহজ: প্রতিটি এজেন্ট ডিস্কে নিজস্ব প্রাইভেট স্ক্র্যাচপ্যাড পায় এবং শুধুমাত্র সেই সেশনের ফাইলগুলোতে লেখে। প্রতিটি ব্রাঞ্চের জন্য শুধুমাত্র একটি ইচ্ছাকৃতভাবে শেয়ার করা ফাইল অনুমোদিত, এবং এটি একটি “last-writer-wins” নিয়ম অনুসরণ করে—যে এজেন্টটি সবশেষে লেখে, সেটিই চূড়ান্ত বিষয়বস্তু নির্ধারণ করে।
একটি presence layer প্রতিটি সক্রিয় সেশন ট্র্যাক করে:
- ব্রাঞ্চের নাম
- যে ফাইলগুলো ব্যবহার করা হচ্ছে তার তালিকা
- শেষ অ্যাক্টিভিটির টাইমস্ট্যাম্প
যখন একটি নতুন সেশন শুরু হয়, এটি রেজিস্ট্রি পরীক্ষা করে। যদি অন্য কোনো সেশন ইতিমধ্যে একই ফাইলগুলোর কোনোটি নিয়ে কাজ করে থাকে, তবে কাজ শুরু হওয়ার আগেই ডেভেলপার একটি সতর্কবার্তা পান।
Advisory vs. blocking locks
প্রথাগত লক ফাইলগুলো একটি ডেড-এন্ড রাস্তার মতো কাজ করে: একবার লক হয়ে গেলে, লকটি রিলিজ না হওয়া পর্যন্ত অন্য যেকোনো প্রসেস অপেক্ষা করতে থাকে। যদি মালিকানাধীন সেশনটি ক্র্যাশ করে, তবে লকটি অনির্দিষ্টকাল ধরে আটকে থাকতে পারে, যা স্টেল (stale) লক ফাইলগুলো ম্যানুয়ালি খোঁজার বাধ্যবাধকতা তৈরি করে।
অ্যাডভাইজরি মডেলটি অনেক বেশি নমনীয়। এটি সম্ভাব্য সংঘর্ষ শনাক্ত হলে একটি সতর্কবার্তা দেয় কিন্তু নতুন সেশনটিকে থামিয়ে দেয় না। যদি কোনো রেজিস্ট্রি এন্ট্রি পুরনো হয়—অর্থাৎ যে প্রসেসটি এটি তৈরি করেছিল তা আর বিদ্যমান না থাকে—তবুও সিস্টেমটি কেবল সতর্কবার্তা দেয়, ফলে ডেভেলপার সিদ্ধান্ত নিতে পারেন তিনি কাজ চালিয়ে যাবেন কি না।
How to implement the pattern
- Partition state by writer – প্রতিটি এজেন্টকে টেম্পোরারি ফাইল এবং স্টেটের জন্য নিজস্ব ডিরেক্টরি দিন। শুধুমাত্র সত্যিকারের গ্লোবাল ডেটার জন্য শেয়ার্ড ফাইল রাখুন এবং সেখানে শুধুমাত্র last-writer-wins নিয়মটি প্রয়োগ করুন।
- Inject awareness at launch – একটি এজেন্ট শুরু করার আগে, presence registry পড়ুন এবং অনুরোধকৃত ফাইলের তালিকার সাথে বিদ্যমান এন্ট্রিগুলো তুলনা করুন। ওভারল্যাপ পাওয়া গেলে কাজ বাতিল করুন বা সতর্কবার্তা দিন।
- Verify liveness at read time – রেজিস্ট্রি এন্ট্রি দেখার সময়, রেকর্ড করা প্রসেস আইডিটি ওএস-এ (OS) এখনও চলছে কি না তা পরীক্ষা করুন। মৃত প্রসেসের এন্ট্রিগুলো বাদ দিন।
- Prefer advisory over blocking – ডেভেলপারদের নিয়ন্ত্রণ বজায় রাখতে দিন। একটি সতর্কবার্তা তাদের কাজ চালিয়ে যাওয়া, থামানো বা বাতিল করার সুযোগ দেয়, যা ডেডলক (deadlock) এড়াতে সাহায্য করে।
- Track waiting states – যখন অনেক এজেন্ট সক্রিয় থাকে, তখন ডেভেলপারের মনোযোগই প্রধান বাধা (bottleneck) হয়ে দাঁড়ায়। কোন এজেন্টগুলো মানুষের ইনপুটের জন্য অপেক্ষা করছে তা প্রদর্শন করুন যাতে কাজের অগ্রাধিকার পুনরায় নির্ধারণ করা যায়।
এই সবকিছুই সাধারণ JSON ফাইলের একটি ডিরেক্টরি দিয়ে তৈরি করা সম্ভব; এর জন্য কোনো এক্সটার্নাল ডেটাবেস বা মেসেজ বাসের প্রয়োজন নেই। সহজ স্টোরেজ ফরম্যাটের কারণে সিস্টেমটি অডিট করা সহজ এবং বিভিন্ন এনভায়রনমেন্টে পোর্টেবল।
Risks and counter-points
কিছু টিম যুক্তি দিতে পারে যে একটি হার্ড লক নিরাপত্তার নিশ্চয়তা দেয়: কোনো দুটি এজেন্ট কখনোই একই ফাইলে লিখতে পারবে না। তবে এর বিনিময়ে রেসিলিয়েন্স (resilience) কমে যায়—ক্র্যাশ করা সেশনগুলো অনাথ লক (orphaned locks) রেখে যায় যা পুরো ওয়ার্কফ্লোকে স্থবির করে দেয়।
What to watch for
আপনি যদি একাধিক AI-চালিত কোড অ্যাসিস্ট্যান্ট নিয়ে কাজ করেন, তবে “share nothing” অ্যাডভাইজরি প্যাটার্নটি তাদের একে অপরের কাজে বাধা দেওয়া থেকে বিরত রাখতে একটি বাস্তবসম্মত পথ প্রদান করে। স্টেট আলাদা রাখা, কাজের উদ্দেশ্য আগেভাগেই প্রকাশ করা এবং মানুষের সিদ্ধান্ত অনুযায়ী কাজ এগিয়ে নেওয়ার সুযোগ দেওয়ার মাধ্যমে, এই পদ্ধতিটি নিরাপত্তা এবং আধুনিক ডেভেলপমেন্ট পাইপলাইনের প্রয়োজনীয় নমনীয়তার মধ্যে ভারসাম্য বজায় রাখে।
