اب ڈویلپرز اوور رائٹ ہونے والی اسٹیٹ فائلوں یا چھپی ہوئی فائلوں کے ٹکراؤ کے خوف کے بغیر ایک ساتھ کئی کوڈنگ ایجنٹ سیشنز شروع کر سکتے ہیں۔ ایک مشاورتی "share-nothing" پیٹرن ہر ایجنٹ کے ورک اسپیس کو الگ کرتا ہے اور ممکنہ تصادم کے بارے میں خبردار کرتا ہے۔ یہ طریقہ کار سخت لاک (hard locks) کے بجائے ایک ہلکے پھلکے رجسٹری کا استعمال کرتا ہے جو کام کے ٹکراؤ سے پہلے ہی اس کی نشاندہی کر دیتا ہے، جس سے سیشن کریش ہونے کی صورت میں بھی پائپ لائنز چلتی رہتی ہیں۔
متوازی ایجنٹس کیوں مشکلات پیدا کرتے ہیں
ایک ہی ریپوزٹری میں ایک سے زیادہ خودکار کوڈنگ اسسٹنٹ چلانے سے کوڈ کی تیاری، ٹیسٹنگ، یا ریفیکٹرنگ کی رفتار بڑھ جاتی ہے۔ عملی طور پر، فوراً دو مسائل سامنے آتے ہیں۔
- اسٹیٹ کرپشن (State corruption) – دو ایجنٹس ایک ہی اسٹیٹ فائل میں لکھتے ہیں؛ بعد میں ہونے والا اندراج (write) پہلے والے کو اوور رائٹ کر دیتا ہے، جس سے پیش رفت ختم ہو جاتی ہے۔
- فائل ٹکراؤ (File collision) – دو ایجنٹس ایک دوسرے سے بے خبر ایک ہی سورس فائل میں ترمیم کرتے ہیں۔ یہ تصادم بعد میں ظاہر ہوتا ہے، جب 'diff' سے معلوم ہوتا ہے کہ تبدیلیاں ایک دوسرے سے مختلف ہیں۔
یہ دونوں مسائل ڈویلپر کا وقت ضائع کرتے ہیں اور ایسے بگ (bugs) پیدا کر سکتے ہیں جن کا سراغ لگانا مشکل ہو۔
"share nothing" کا اصول
بنیادی تصور سادہ ہے: ہر ایجنٹ کو ڈسک پر اپنا ذاتی اسکریچ پیڈ (scratchpad) ملتا ہے اور وہ صرف اسی سیشن سے متعلق فائلوں میں لکھتا ہے۔ فی برانچ صرف ایک جان بوجھ کر شیئر کی گئی فائل کی اجازت ہے، اور یہ "last-writer-wins" کے اصول پر عمل کرتی ہے—جو ایجنٹ آخر میں لکھے گا، وہی حتمی مواد کا تعین کرے گا۔
ایک پریزنس لیئر (presence layer) ہر فعال سیشن کا سراغ لگاتی ہے:
- برانچ کا نام
- چھوئی جانے والی فائلوں کی فہرست
- آخری سرگرمی کا ٹائم اسٹیمپ
جب ایک نیا سیشن شروع ہوتا ہے، تو یہ رجسٹری سے مشورہ کرتا ہے۔ اگر کوئی دوسرا سیشن پہلے سے ہی انہی فائلوں میں سے کسی ایک کو ہینڈل کر رہا ہو، تو ڈویلپر کو کام شروع ہونے سے پہلے ہی وارننگ مل جاتی ہے۔
مشاورتی (Advisory) بمقابلہ بلاکنگ لاک (Blocking locks)
روایتی لاک فائلیں ایک بند راستے کی طرح کام کرتی ہیں: ایک بار لاک لگ جائے تو کوئی بھی دوسرا عمل (process) اس کے ریلیز ہونے تک انتظار کرتا ہے۔ اگر مالک سیشن کریش ہو جائے، تو لاک غیر معینہ مدت تک برقرار رہ سکتا ہے، جس سے پرانی لاک فائلوں کو دستی طور پر تلاش کرنے کی ضرورت پڑتی ہے۔
مشاورتی ماڈل زیادہ نرم ہے۔ یہ ممکنہ تصادم کا پتہ چلنے پر وارننگ جاری کرتا ہے لیکن نئے سیشن کو روکتا نہیں ہے۔ اگر رجسٹری انٹری پرانی ہو—یعنی وہ عمل جس نے اسے بنایا تھا اب موجود نہیں ہے—تب بھی سسٹم صرف وارننگ دیتا ہے، اور ڈویلپر کو فیصلہ کرنے دیتا ہے کہ آیا اسے جاری رکھنا ہے یا نہیں۔
اس پیٹرن کو کیسے نافذ کیا جائے
- لکھنے والے کے لحاظ سے اسٹیٹ کی تقسیم – ہر ایجنٹ کو عارضی فائلوں اور اسٹیٹ کے لیے اپنی الگ ڈائریکٹری دیں۔ شیئرڈ فائلوں کو صرف حقیقی عالمی ڈیٹا (global data) کے لیے مخصوص کریں اور وہاں صرف "last-writer-wins" کا اصول لاگو کریں۔
- لانچ کے وقت آگاہی فراہم کرنا – ایجنٹ کے شروع کرنے سے پہلے، پریزنس رجسٹری کو پڑھیں اور مطلوبہ فائلوں کی فہرست کا موجودہ اندراجات سے موازنہ کریں۔ اگر کوئی اوور لیپ (overlap) ملے تو عمل روک دیں یا وارننگ دیں۔
- پڑھتے وقت لائیو ہونے کی تصدیق کرنا – رجسٹری انٹری سے مشورہ کرتے وقت، چیک کریں کہ کیا ریکارڈ شدہ پروسیس آئی ڈی (process ID) ابھی بھی OS پر چل رہی ہے۔ مردہ (dead) پروسیسز سے متعلق اندراجات کو ختم کر دیں۔
- بلاکنگ کے بجائے مشاورتی کو ترجیح دیں – ڈویلپرز کو کنٹرول برقرار رکھنے دیں۔ ایک وارننگ انہیں جاری رکھنے، روکنے یا منسوخ کرنے کی اجازت دیتی ہے، جس سے ڈیڈ لاک (deadlock) سے بچا جا سکتا ہے۔
- انتظار کرنے والی حالتوں کا سراغ لگانا – جب بہت سے ایجنٹس فعال ہوں، تو ڈویلپر کی توجہ رکاوٹ بن جاتی ہے۔ یہ دکھائیں کہ کون سے ایجنٹس انسانی ان پٹ کا انتظار کر رہے ہیں تاکہ کام کو دوبارہ ترجیح دی جا سکے۔
یہ سب کچھ JSON فائلوں کی ایک سادہ ڈائریکٹری کے ذریعے بنایا جا سکتا ہے؛ اس کے لیے کسی بیرونی ڈیٹا بیس یا میسج بس کی ضرورت نہیں ہے۔ سادہ اسٹوریج فارمیٹ سسٹم کو آڈٹ کرنا آسان اور مختلف ماحول میں منتقل کرنا (portable) آسان بناتا ہے۔
خطرات اور جوابی دلائل
کچھ ٹیمیں یہ دلیل دے سکتی ہیں کہ ہارڈ لاک حفاظت کی ضمانت دیتا ہے: کوئی بھی دو ایجنٹس کبھی بھی ایک ہی فائل میں نہیں لکھ سکتے۔ اس کا نقصان کم لچک (resilience) ہے—کراش ہونے والے سیشنز ایسی لاک فائلیں چھوڑ جاتے ہیں جو پورے ورک فلو کو روک دیتی ہیں۔
کن باتوں کا خیال رکھیں
اگر آپ ایک ساتھ کئی AI سے چلنے والے کوڈ اسسٹنٹ استعمال کر رہے ہیں، تو "share nothing" مشاورتی پیٹرن انہیں ایک دوسرے کے کام میں مداخلت سے روکنے کا ایک عملی راستہ فراہم کرتا ہے۔ اسٹیٹ کو الگ کر کے، ارادوں کو جلد ظاہر کر کے، اور انسانوں کو یہ فیصلہ کرنے دے کر کہ کب آگے بڑھنا ہے، یہ طریقہ کار حفاظت اور جدید ڈویلپمنٹ پائپ لائنز کی ضرورت کے مطابق لچک کے درمیان توازن برقرار رکھتا ہے۔
