ایک AI سے چلنے والا کوڈنگ اسسٹنٹ، جو کہ ایک فری ٹائر سرور کیو (free-tier server queue) پر تھا، اس نے ایک schema-migration فائل لکھ دی کیونکہ خودکار 'context compaction' کے دوران سسٹم کا "freeze migrations" والا اصول غائب ہو گیا۔ یہ واقعہ ظاہر کرتا ہے کہ جب طویل چیٹ سیشنز کا خلاصہ (summarize) کیا جاتا ہے، تو حفاظتی اقدامات کے لیے صرف پرامپٹ پر مبنی ہدایات پر بھروسہ کرنا الٹا پڑ سکتا ہے۔

کیا ہوا

ایک مشترکہ کوڈنگ ایجنٹ ایک سسٹم پرامپٹ کے ساتھ چل رہا تھا جس میں صرف ایک اصول شامل تھا: migration فائلوں کو تخلیق یا تبدیل نہ کریں۔ اس اصول نے ریلیز برانچ پر schema migrations کو منجمد (frozen) رکھا جبکہ ڈویلپرز ایجنٹ کو معمول کی تبدیلیوں کے لیے استعمال کر رہے تھے۔

ایک طویل سیشن کے دوران، گفتگو ماڈل کی ٹوکن حد (token limit) سے تجاوز کر گئی۔ سرور نے context compaction کا استعمال کیا، جس میں ٹوکن بجٹ کے اندر رہنے کے لیے مکمل چیٹ ہسٹری کو ایک مختصر خلاصے سے بدل دیا گیا۔ خلاصے میں فائل پاتھ (file-path) کے ذکر تو رکھے گئے لیکن منفی پابندی ("do not write to migrations/**") کو نکال دیا گیا۔ جب ماڈل نے اپنا اگلا جواب تیار کیا، تو 'freeze rule' اس کی ورکنگ میموری میں موجود نہیں تھا۔

اس کے بعد ایجنٹ نے کوئری کی رفتار بہتر بنانے کے لیے ایک SQL تبدیلی (tweak) تجویز کی۔ متعلقہ ٹول نے اس تبدیلی کو ڈسک پر ایک migration فائل کے طور پر محفوظ کر لیا۔ یونٹ ٹیسٹ (Unit tests) پاس ہو گئے کیونکہ وہ کبھی بھی خام SQL migrations کو نہیں چلاتے، اور یہ تبدیلی بعد میں کوڈ ریویو کے فرق (diff) میں نظر آئی۔

یہ کیوں اہم ہے

  • حفاظتی رکاوٹیں (Guardrails) غائب ہو گئیں: پرامپٹ کی سطح کی پالیسیاں غیر مستحکم ہوتی ہیں۔ جب ماڈل کا سیاق و سباق (context) کمپریس کیا جاتا ہے، تو کوئی بھی "نہ کریں" والا جملہ ضائع ہو سکتا ہے، جس سے سسٹم ممنوعہ اقدامات کرنے کے لیے آزاد ہو جاتا ہے۔
  • یونٹ ٹیسٹ کافی نہیں ہیں: وہ ٹیسٹ جو migration اسکرپٹس نہیں چلاتے، وہ تحفظ کا غلط احساس دلا سکتے ہیں۔ یہ تبدیلی اس لیے نظر انداز ہو گئی کیونکہ ٹیسٹ سوٹ نے کبھی بھی نئے SQL کو استعمال نہیں کیا تھا۔
  • انسانی ریویو میں تاخیر: جب تک ریویور نے فرق (diff) دیکھا، migration فائل پہلے ہی کمٹ (commit) ہو چکی تھی، جس کے لیے رول بیک (rollback) یا اضافی صفائی کی ضرورت پڑی۔

اس غلطی کی وجہ سے سسٹم بند (outage) تو نہیں ہوا، لیکن اس نے غیر ضروری migration کو واپس لینے کے لیے اضافی کام کرنے پر مجبور کیا اور لائیو ڈیٹا بیسز کو متاثر کرنے والے اسی طرح کے خطرے کو بڑھا دیا۔

حفاظتی رکاوٹ کیسے ناکام ہوئی

  1. صرف پرامپٹ والا اصول – 'Freeze' کا اصول سسٹم پرامپٹ میں سادہ متن کے طور پر موجود تھا۔
  2. طویل سیشن – چیٹ ماڈل کے کنٹیکسٹ ونڈو (context window) سے بڑھ گئی۔
  3. کمپیکشن (Compaction) – سرور نے مکمل ٹرانسکرپٹ کو اسموں پر مبنی (noun-heavy) خلاصے سے بدل دیا۔
  4. منفی پابندی کا ضیاع – خلاصے میں "نہ کریں" والی ہدایت کو چھوڑ دیا گیا، جس سے اصول ختم ہو گیا۔
  5. ماڈل کا آؤٹ پٹ – اصول کے بغیر، ماڈل نے migration تخلیق کرنے والا جواب تیار کیا۔

خلاصہ کرنے والے (Summarizers) اسموں (جیسے فائل پاتھ، فنکشن کے نام) کو برقرار رکھنے اور نفی (negations) کو چھوڑ دینے کا رجحان رکھتے ہیں، یہی وجہ ہے کہ اصول خاموشی سے غائب ہو گیا۔

حل: حفاظتی رکاوٹوں کو 'write path' پر منتقل کریں

پرامپٹ میں پابندیوں کو شامل کرنے کے بجائے، انہیں وہاں نافذ کریں جہاں کوڈ ڈسک کو چھوتا ہے۔

  1. ایک پالیسی فائل بنائیں (مثلاً agent_policy.txt) جو ممنوعہ راستوں (deny-listed paths) جیسے کہ schema/** یا migrations/** کی فہرست دے۔
  2. ایک pre-apply اسکرپٹ شامل کریں جو پالیسی فائل کو پڑھے اور 'apply tool' چلنے سے پہلے ہر 'diff' کو اسکین کرے۔
  3. Fail closed (یعنی کام روک دیں) اگر پالیسی فائل غائب ہو، خالی ہو، یا اگر کوئی 'diff' کسی ممنوعہ راستے کو چھوتا ہو۔
  4. ماڈل سے ممنوعہ فہرست کی تصدیق نہ مانگیں؛ تصدیق صرف ایک اشارہ ہے، نفاذ (enforcement) نہیں ہے۔

صرف پرامپٹ بمقابلہ ڈسک پر مبنی حفاظتی رکاوٹیں

پہلو صرف پرامپٹ والا freeze ڈسک پر مبنی گیٹ (Gate)
کمپیکشن کا خطرہ اصول غائب ہو سکتا ہے پالیسی فائل برقرار رہتی ہے
یونٹ ٹیسٹ کوریج ممنوعہ تحریروں سے نظر انداز ہو سکتا ہے راستہ چیک کرنے سے ٹیسٹ کے باوجود تحریر بلاک ہو جاتی ہے
انسانی ریویو کا وقت نقصان پہلے ہی کمٹ ہو چکا ہو سکتا ہے تحریر کبھی شروع ہی نہیں ہوتی، ریویور کو کوئی تبدیلی نظر نہیں آتی
نفاذ کی کوشش کم سے کم (صرف پرامپٹ میں ایک لائن) چھوٹا اسکرپٹ + پالیسی فائل

جوابی نکتہ نظر (Counter-point)

آگے کیا نظر رکھنا ہے

حاصلِ کلام (Takeaway)

اگر آپ کو ایسے اصول کی ضرورت ہے جسے کبھی نظر انداز نہ کیا جائے—جیسے کہ "فریز کے دوران کوئی migrations نہیں"—تو اسے ڈسک پر محفوظ کریں اور اسے لکھنے کے مقام (point of write) پر نافذ کریں۔ پرامپٹ کا متن اکیلا اس بات کی ضمانت نہیں دے سکتا کہ ماڈل کا سیاق و سباق کمپریس ہونے کے بعد اصول برقرار رہے گا۔