ഒരു ഫ്രീ-ടിയർ സെർവർ ക്യൂവിൽ പ്രവർത്തിച്ചിരുന്ന AI അധിഷ്ഠിത കോഡിംഗ് അസിസ്റ്റന്റ്, ഓട്ടോമാറ്റിക് കോൺടെക്സ്റ്റ് കോംപാക്ഷൻ (context compaction) സമയത്ത് സിസ്റ്റത്തിന്റെ “ഫ്രീസ് മൈഗ്രേഷൻസ്” (freeze migrations) എന്ന നിയമം ഇല്ലാതായതോടെ ഒരു സ്കീമ-മൈഗ്രേഷൻ ഫയൽ എഴുതിച്ചേർത്തു. നീണ്ട ചാറ്റ് സെഷനുകൾ സംഗ്രഹിക്കപ്പെടുമ്പോൾ (summarized), സുരക്ഷ ഉറപ്പാക്കാൻ പ്രോംപ്റ്റ് അധിഷ്ഠിത നിർദ്ദേശങ്ങളെ മാത്രം ആശ്രയിക്കുന്നത് തിരിച്ചടിയായേക്കാം എന്ന് ഈ സംഭവം കാണിച്ചുതരുന്നു.

എന്താണ് സംഭവിച്ചത്

ഒരു ഷെയർഡ് കോഡിംഗ് ഏജന്റ് പ്രവർത്തിച്ചിരുന്നത് ഒരു സിസ്റ്റം പ്രോംപ്റ്റിലുണ്ടായിരുന്ന ഒരൊറ്റ നിയമം അടിസ്ഥാനമാക്കിയായിരുന്നു: മൈഗ്രേഷൻ ഫയലുകൾ നിർമ്മിക്കാനോ മാറ്റം വരുത്താനോ പാടില്ല. ഡെവലപ്പർമാർ പതിവ് എഡിറ്റിംഗുകൾക്കായി ഏജന്റിനെ ഉപയോഗിക്കുമ്പോൾ, റിലീസ് ബ്രാഞ്ചിലെ സ്കീമ മൈഗ്രേഷനുകൾ ഫ്രീസ് ചെയ്തു നിർത്താനാണ് ഈ നിയമം ഉപയോഗിച്ചിരുന്നത്.

നീണ്ടുനിന്ന ഒരു സെഷനിൽ, സംഭാഷണം മോഡലിന്റെ ടോക്കൺ പരിധി കവിഞ്ഞു. ടോക്കൺ ബജറ്റിനുള്ളിൽ നിൽക്കുന്നതിനായി സെർവർ context compaction പ്രയോഗിക്കുകയും, മുഴുവൻ ചാറ്റ് ഹിസ്റ്ററിനും പകരം ഒരു ചെറിയ സംഗ്രഹം (summary) നൽകുകയും ചെയ്തു. ഈ സംഗ്രഹത്തിൽ ഫയൽ പാത്തുകൾ (file-paths) നിലനിർത്തിയിരുന്നെങ്കിലും, നിഷേധാത്മകമായ നിയന്ത്രണം (“do not write to migrations/**”) ഒഴിവാക്കപ്പെട്ടു. മോഡൽ അടുത്ത മറുപടി തയ്യാറാക്കിയപ്പോൾ, ഫ്രീസ് നിയമം അതിന്റെ വർക്കിംഗ് മെമ്മറിയിൽ ഉണ്ടായിരുന്നില്ല.

തുടർന്ന് ക്വറി വേഗത വർദ്ധിപ്പിക്കുന്നതിനായി ഒരു SQL മാറ്റം ഏജന്റ് നിർദ്ദേശിച്ചു. അതോടൊപ്പം വന്ന ടൂൾ ഈ മാറ്റം ഒരു മൈഗ്രേഷൻ ഫയലായി ഡിസ്കിൽ സേവ് ചെയ്തു. യൂണിറ്റ് ടെസ്റ്റുകൾ പരാജയപ്പെട്ടില്ല, കാരണം അവ ഒരിക്കലും റ)」 SQL മൈഗ്രേഷനുകൾ പ്രവർത്തിപ്പിക്കാറില്ല; കോഡ് റിവ്യൂ ഡിഫിൽ (code-review diff) പരിശോധിച്ചപ്പോഴാണ് ഈ മാറ്റം ശ്രദ്ധയിൽപ്പെട്ടത്.

എന്തുകൊണ്ട് ഇത് പ്രധാനമാണ്

  • ഗാർഡ്‌റെയിലുകൾ (Guardrails) അപ്രത്യക്ഷമായി: പ്രോംപ്റ്റ് തലത്തിലുള്ള പോളിസികൾ അസ്ഥിരമാണ്. മോഡലിന്റെ കോൺടെക്സ്റ്റ് കംപ്രസ് ചെയ്യപ്പെടുമ്പോൾ, ഏതൊരു “do not” എന്ന നിർദ്ദേശവും നഷ്ടപ്പെട്ടേക്കാം, ഇത് നിരോധിത പ്രവർത്തനങ്ങൾ ചെയ്യാൻ സിസ്റ്റത്തിന് അവസരം നൽകുന്നു.
  • യൂണിറ്റ് ടെസ്റ്റുകൾ മാത്രം പോരാ: മൈഗ്രേഷൻ സ്ക്രിപ്റ്റുകൾ പ്രവർത്തിപ്പിക്കാത്ത ടെസ്റ്റുകൾ തെറ്റായ സുരക്ഷിതബോധം നൽകിയേക്കാം. ടെസ്റ്റ് സ്യൂട്ട് പുതിയ SQL ഉപയോഗിച്ച് പരിശോധിക്കാത്തതുകൊണ്ട് ഈ മാറ്റം ശ്രദ്ധിക്കപ്പെടാതെ പോയി.
  • മനുഷ്യ പരിശോധന വൈകി: ഒരു റിവ്യൂവർ ഡിഫ് (diff) കാണുന്നതിന് മുമ്പ് തന്നെ മൈഗ്രേഷൻ ഫയൽ കമിറ്റ് ചെയ്യപ്പെട്ടിരുന്നു, ഇത് റോൾബാക്ക് (rollback) ചെയ്യാനോ അല്ലെങ്കിൽ അധിക ക്ലീനപ്പ് ജോലികൾ ചെയ്യാനോ ഇടയാക്കി.

ഈ പിശക് ഒരു ഔട്ട്‌േജ് (outage) ഉണ്ടാക്കിയില്ലെങ്കിലും, അനാവശ്യമായ ഒരു മൈഗ്രേഷൻ റീവേർട്ട് ചെയ്യാൻ അധിക ജോലി ആവശ്യമായി വന്നു. കൂടാതെ, സമാനമായ ഒരു പിശക് ലൈവ് ഡാറ്റാബേസുകളെ ബാധിക്കാനുള്ള സാധ്യതയും ഇത് വർദ്ധിപ്പിച്ചു.

ഗാർഡ്‌റെയിൽ പരാജയപ്പെട്ടത് എങ്ങനെ

  1. പ്രോംപ്റ്റ് മാത്രമുള്ള നിയമം – ഫ്രീസ് നിയമം സിസ്റ്റം പ്രോംപ്റ്റിൽ വെറും ടെക്സ്റ്റ് രൂപത്തിൽ മാത്രമായിരുന്നു.
  2. നീണ്ട സെഷൻ – ചാറ്റ് മോഡലിന്റെ കോൺടെക്സ്റ്റ് വിൻഡോവിനേക്കാൾ വലുതായി.
  3. കോംപാക്ഷൻ – സെർവർ മുഴുവൻ ട്രാൻസ്ക്രിപ്റ്റിനും പകരം നാമങ്ങൾ (nouns) കൂടുതലുള്ള ഒരു സംഗ്രഹം നൽകി.
  4. നിഷേധാത്മക നിയന്ത്രണം നഷ്ടപ്പെട്ടു – സംഗ്രഹത്തിൽ “do not” എന്ന നിർദ്ദേശം ഒഴിവാക്കപ്പെട്ടതോടെ നിയമം ഇല്ലാതായി.
  5. മോഡൽ ഔട്ട്‌പുട്ട് – നിയമം ഇല്ലാതായതോടെ, മോഡൽ ഒരു മൈഗ്രേഷൻ ഫയൽ നിർമ്മിക്കുന്ന മറുപടി നൽകി.

സംഗ്രഹങ്ങൾ തയ്യാറാക്കുമ്പോൾ നാമങ്ങൾ (ഫയൽ പാത്തുകൾ, ഫംഗ്ഷൻ പേരുകൾ) നിലനിർത്താനും നിഷേധങ്ങൾ (negations) ഒഴിവാക്കാനും സാധ്യതയുണ്ട്, അതുകൊണ്ടാണ് നിയമം അറിയാതെ തന്നെ ഇല്ലാതായത്.

പരിഹാരം: ഗാർഡ്‌റെയിലുകൾ 'റൈറ്റ് പാത്തിലേക്ക്' (write path) മാറ്റുക

നിരോധനങ്ങൾ പ്രോംപ്റ്റിൽ ഉൾപ്പെടുത്തുന്നതിന് പകരം, കോഡ് ഡിസ്കിൽ സേവ് ചെയ്യപ്പെടുന്ന ഘട്ടത്തിൽ അവ നടപ്പിലാക്കുക.

  1. ഒരു പോളിസി ഫയൽ നിർമ്മിക്കുക (ഉദാഹരണത്തിന്, agent_policy.txt) ഇതിൽ schema/** അല്ലെങ്കിൽ migrations/** പോലുള്ള നിരോധിത പാത്തുകൾ ഉൾപ്പെടുത്തുക.
  2. ഒരു പ്രീ-അപ്ലൈ സ്ക്രിപ്റ്റ് ചേർക്കുക; ഇത് പോളിസി ഫയൽ വായിക്കുകയും അപ്ലൈ ടൂൾ പ്രവർത്തിക്കുന്നതിന് മുമ്പ് ഓരോ ഡിഫും (diff) പരിശോധിക്കുകയും ചെയ്യും.
  3. Fail closed ചെയ്യുക; പോളിസി ഫയൽ ഇല്ലെങ്കിലോ, ശൂന്യമാണെങ്കിലോ, അല്ലെങ്കിൽ ഒരു ഡിഫ് നിരോധിത പാത്തിനെ സ്പർശിക്കുന്നുണ്ടെങ്കിലോ പ്രവർത്തനം തടയുക.
  4. നിരോധിത പട്ടിക (deny list) സ്ഥിരീകരിക്കാൻ മോഡലിനോട് ആവശ്യപ്പെടരുത്; സ്ഥിരീകരണം എന്നത് ഒരു സൂചന മാത്രമാണ്, അത് നിയമം നടപ്പിലാക്കുന്നില്ല.

പ്രോംപ്റ്റ് മാത്രമുള്ളതും ഡിസ്ക് അധിഷ്ഠിതവുമായ ഗാർഡ്‌റെയിലുകൾ തമ്മിലുള്ള വ്യത്യാസം

വശം (Aspect) പ്രോംപ്റ്റ് മാത്രമുള്ള ഫ്രീസ് ഡിസ്ക് അധിഷ്ഠിത ഗേറ്റ്
കോംപാക്ഷൻ റിസ്ക് നിയമം ഇല്ലാതായേക്കാം പോളിസി ഫയൽ സുരക്ഷിതമായിരിക്കും
യൂണിറ്റ്-ടെസ്റ്റ് കവറേജ് നിരോധിത എഴുത്തുകൾ ശ്രദ്ധിക്കപ്പെടാതെ പോയേക്കാം ടെസ്റ്റുകൾ എന്തുതന്നെയായാലും പാത്ത് ചെക്ക് എഴുത്ത് തടയും
ഹ്യൂമൻ റിവ്യൂ സമയം മാറ്റങ്ങൾ കമിറ്റ് ആയിട്ടുണ്ടാകാം എഴുത്ത് തുടങ്ങുകയേ ഇല്ല, റിവ്യൂവർക്ക് മാറ്റങ്ങൾ കാണാൻ കഴിയില്ല
നടപ്പിലാക്കാനുള്ള പ്രയത്നം കുറഞ്ഞത് (പ്രോംപ്റ്റിൽ ഒരു വരി മാത്രം) ചെറിയ സ്ക്രിപ്റ്റ് + പോളിസി ഫയൽ

എതിർവാദം

അടുത്തതായി ശ്രദ്ധിക്കേണ്ടവ

ചുരുക്കം

"ഫ്രീസ് സമയത്ത് മൈഗ്രേഷനുകൾ പാടില്ല" എന്നത് പോലുള്ള ഒരിക്കലും അവഗണിക്കപ്പെടാൻ പാടില്ലാത്ത ഒരു നിയമം ആവശ്യമുണ്ടെങ്കിൽ, അത് ഡിസ്കിൽ സൂക്ഷിക്കുകയും കോഡ് എഴുതുന്ന ഘട്ടത്തിൽ തന്നെ നടപ്പിലാക്കുകയും ചെയ്യുക. മോഡലിന്റെ കോൺടെക്സ്റ്റ് കംപ്രസ്സ് ചെയ്യപ്പെട്ടാൽ പ്രോംപ്റ്റ് ടെക്സ്റ്റ് മാത്രം സുരക്ഷിതത്വം ഉറപ്പുനൽകില്ല.