একটি ফ্রি-টিয়ার সার্ভার কিউতে থাকা একটি AI-চালিত কোডিং অ্যাসিস্ট্যান্ট একটি স্কিমা-মাইগ্রেশন (schema-migration) ফাইল লিখে ফেলেছিল, কারণ অটোমেটিক কনটেক্সট কম্প্যাকশন (context compaction)-এর সময় সিস্টেমের "freeze migrations" নিয়মটি হারিয়ে গিয়েছিল। এই ঘটনাটি দেখায় যে, দীর্ঘ চ্যাট সেশন সামারি বা সংক্ষেপ করার সময় নিরাপত্তার জন্য শুধুমাত্র প্রম্পট-ভিত্তিক নির্দেশাবলীর ওপর নির্ভর করা উল্টো ফল দিতে পারে।

কী ঘটেছিল

একটি শেয়ারড কোডিং এজেন্ট একটি সিস্টেম প্রম্পট নিয়ে কাজ করছিল যাতে একটি মাত্র নিয়ম ছিল: migration ফাইল তৈরি বা পরিবর্তন করবেন না। ডেভেলপাররা যখন রুটিন কাজের জন্য এজেন্টটি ব্যবহার করছিলেন, তখন এই নিয়মটি রিলিজ ব্রাঞ্চে স্কিমা মাইগ্রেশনগুলোকে স্থির (frozen) রাখতে সাহায্য করছিল।

একটি দীর্ঘ সেশনের সময় কথোপকথনটি মডেলের টোকেন লিমিট অতিক্রম করে যায়। সার্ভার তখন টোকেন বাজেটের মধ্যে থাকতে context compaction ব্যবহার করে, যা সম্পূর্ণ চ্যাট হিস্ট্রিকে একটি ছোট সামারি বা সারসংক্ষেপ দিয়ে প্রতিস্থাপন করে। সামারিটিতে ফাইলের পথের (file-path) উল্লেখ থাকলেও নেতিবাচক সীমাবদ্ধতা (“do not write to migrations/**”) বাদ পড়ে যায়। যখন মডেলটি তার পরবর্তী রেসপন্স তৈরি করে, তখন সেই 'ফ্রিজ' নিয়মটি তার ওয়ার্কিং মেমরিতে আর ছিল না।

এরপর এজেন্টটি কুয়েরি স্পিড বাড়ানোর জন্য একটি SQL পরিবর্তনের পরামর্শ দেয়। এর সাথে থাকা টুলটি সেই পরিবর্তনটিকে ডিস্কে একটি মাইগ্রেশন ফাইল হিসেবে সেভ করে ফেলে। ইউনিট টেস্টগুলো পাস হয়ে গিয়েছিল কারণ সেগুলো কখনোই র (raw) SQL মাইগ্রেশন চালায় না, এবং এই পরিবর্তনটি পরে কোড-রিভিউ ডিফ (code-review diff)-এ ধরা পড়ে।

কেন এটি গুরুত্বপূর্ণ

  • গার্ডরেল (Guardrails) হারিয়ে যাওয়া: প্রম্পট-লেভেল পলিসিগুলো অস্থির বা পরিবর্তনশীল। যখন মডেলের কনটেক্সট সংকুচিত করা হয়, তখন যেকোনো "do not" বা "করবেন না" নির্দেশ হারিয়ে যেতে পারে, যার ফলে সিস্টেমটি নিষিদ্ধ কাজ করার সুযোগ পেয়ে যায়।
  • ইউনিট টেস্ট যথেষ্ট নয়: যে টেস্টগুলো মাইগ্রেশন স্ক্রিপ্ট চালায় না, সেগুলো নিরাপত্তার একটি মিথ্যা ধারণা দিতে পারে। এই পরিবর্তনটি ধরা পড়েনি কারণ টেস্ট স্যুট কখনোই নতুন SQL-টি পরীক্ষা করেনি।
  • হিউম্যান রিভিউতে দেরি হওয়া: একজন রিভিউয়ার যখন ডিফ (diff) দেখেন, ততক্ষণে মাইগ্রেশন ফাইলটি কমিট হয়ে গেছে, যার ফলে রোলব্যাক বা অতিরিক্ত ক্লিনআপের প্রয়োজন পড়ে।

এই ভুলের কারণে কোনো আউটজ (outage) ঘটেনি, তবে একটি অপ্রয়োজনীয় মাইগ্রেশন রিভার্ট করার জন্য অতিরিক্ত কাজ করতে হয়েছে এবং লাইভ ডেটাবেস ক্ষতিগ্রস্ত হওয়ার ঝুঁকি বাড়িয়ে দিয়েছে।

কীভাবে গার্ডরেলটি ব্যর্থ হলো

  1. শুধুমাত্র প্রম্পট-ভিত্তিক নিয়ম – 'ফ্রিজ' নিয়মটি সিস্টেম প্রম্পটে সাধারণ টেক্সট হিসেবে ছিল।
  2. দীর্ঘ সেশন – চ্যাটটি মডেলের কনটেক্সট উইন্ডোর বাইরে চলে যায়।
  3. কমপ্যাকশন – সার্ভার সম্পূর্ণ ট্রান্সক্রিপ্টটি সরিয়ে একটি বিশেষ্য-প্রধান (noun-heavy) সামারি দিয়ে প্রতিস্থাপন করে।
  4. নেতিবাচক সীমাবদ্ধতা হারিয়ে যাওয়া – সামারিটি “do not” নির্দেশটি বাদ দিয়ে দেয়, ফলে নিয়মটি মুছে যায়।
  5. মডেলের আউটপুট – নিয়মটি না থাকায় মডেলটি মাইগ্রেশন তৈরি করার মতো রেসপন্স জেনারেট করে।

সামারাইজার বা সারসংক্ষেপকারী টুলগুলো সাধারণত বিশেষ্য (যেমন: ফাইলের পাথ, ফাংশনের নাম) বজায় রাখে কিন্তু নেতিবাচক শব্দগুলো বাদ দিয়ে দেয়, আর এই কারণেই নিয়মটি নিঃশব্দে হারিয়ে গিয়েছিল।

সমাধান: গার্ডরেলগুলোকে রাইট পাথে (write path) নিয়ে যান

প্রম্পটে নিষেধাজ্ঞা অন্তর্ভুক্ত করার পরিবর্তে, কোড যেখানে ডিস্ক স্পর্শ করে সেখানেই সেগুলো প্রয়োগ করুন।

  1. একটি পলিসি ফাইল তৈরি করুন (যেমন, agent_policy.txt) যেখানে schema/** বা migrations/**-এর মতো নিষিদ্ধ (deny-listed) পাথগুলোর তালিকা থাকবে।
  2. একটি প্রি-অ্যালাই (pre-apply) স্ক্রিপ্ট যোগ করুন যা পলিসি ফাইলটি পড়বে এবং অ্যাপ্লাই টুলটি চালানোর আগে প্রতিটি ডিফ (diff) স্ক্যান করবে।
  3. ফেইল ক্লোজ (Fail closed) পদ্ধতি অনুসরণ করুন: যদি পলিসি ফাইলটি অনুপস্থিত বা খালি থাকে, অথবা কোনো ডিফ নিষিদ্ধ পাথ স্পর্শ করে, তবে কাজটিকে ব্যর্থ করে দিন।
  4. মডেলকে ডিনাই লিস্ট (deny list) নিশ্চিত করতে বলবেন না; নিশ্চিতকরণ কেবল একটি সংকেত মাত্র, এটি কোনো এনফোর্সমেন্ট বা প্রয়োগ নয়।

প্রম্পট-ভিত্তিক বনাম ডিস্ক-ভিত্তিক গার্ডরেল

বিষয় শুধুমাত্র প্রম্পট-ভিত্তিক ফ্রিজ ডিস্ক-ভিত্তিক গেট
কম্প্যাকশন ঝুঁকি নিয়মটি হারিয়ে যেতে পারে পলিসি ফাইল অক্ষত থাকে
ইউনিট-টেস্ট কভারেজ নিষিদ্ধ রাইট মিস করতে পারে পাথ চেক নির্বিশেষে রাইট ব্লক করে
হিউম্যান রিভিউয়ের সময় ক্ষতি ইতিমধ্যে হয়ে যেতে পারে রাইট শুরুই হয় না, রিভিউয়ার কোনো পরিবর্তন দেখেন না
বাস্তবায়নের প্রচেষ্টা নগণ্য (প্রম্পটে মাত্র একটি লাইন) ছোট স্ক্রিপ্ট + পলিসি ফাইল

পাল্টা যুক্তি

পরবর্তীতে যা খেয়াল রাখতে হবে

মূল শিক্ষা

আপনার যদি এমন কোনো নিয়ম প্রয়োজন হয় যা কখনোই উপেক্ষা করা যাবে না—যেমন "ফ্রিজ চলাকালীন কোনো মাইগ্রেশন নয়"—তবে সেটি ডিস্কে সংরক্ষণ করুন এবং রাইট করার সময় তা প্রয়োগ করুন। মডেলের কনটেক্সট সংকুচিত হয়ে গেলে শুধুমাত্র প্রম্পট টেক্সট স্থায়িত্ব বা নিশ্চয়তা দিতে পারে না।