ஒரு இலவசத் தரநிலை (free-tier) சர்வர் வரிசையில் இயங்கிக் கொண்டிருந்த AI-ஆல் இயக்கப்படும் கோடிங் உதவியாளர், தானியங்கி சூழல் சுருக்கத்தின் (automatic context compaction) போது சிஸ்டத்தின் “freeze migrations” விதி மறைந்துவிட்டதால், ஒரு schema-migration கோப்பை உருவாக்கியது. நீண்ட உரையாடல் அமர்வுகள் சுருக்கப்படும்போது, பாதுகாப்பு விதிகளைப் பின்பற்றுவதற்கு ப்ராம்ப்ட் (prompt) அடிப்படையிலான அறிவுறுத்தல்களை மட்டுமே நம்பியிருப்பது பின்விளைவுகளை ஏற்படுத்தும் என்பதை இந்தச் சம்பவம் காட்டுகிறது.
என்ன நடந்தது
பகிரப்பட்ட ஒரு கோடிங் ஏஜென்ட் (shared coding agent), ஒரு சிஸ்டம் ப்ராம்ப்ட்டுடன் இயங்கியது. அதில் ஒரே ஒரு விதி மட்டுமே இருந்தது: migration கோப்புகளை உருவாக்கவோ அல்லது மாற்றவோ வேண்டாம். டெவலப்பர்கள் வழக்கமான மாற்றங்களுக்காக இந்த ஏஜென்ட்டைப் பயன்படுத்தும் போது, இந்த விதி schema migrations-ஐ release branch-இல் முடக்கி (frozen) வைத்திருந்தது.
நீண்ட அமர்வு ஒன்றின் போது, உரையாடல் மாடலின் டோக்கன் வரம்பைத் (token limit) தாண்டியது. இதனால் சர்வர் context compaction-ஐத் தூண்டியது, இது டோக்கன் வரம்பிற்குள் இருப்பதற்காக முழு உரையாடல் வரலாற்றையும் ஒரு சிறிய சுருக்கமாக மாற்றியது. அந்தச் சுருக்கம் கோப்புப் பாதைகளைக் (file-path) குறிப்பிட்டது, ஆனால் எதிர்மறைத் தடையை (“do not write to migrations/**”) நீக்கிவிட்டது. மாடல் தனது அடுத்த பதிலை உருவாக்கியபோது, அந்த freeze விதி அதன் செயல்பாட்டு நினைவகத்தில் (working memory) இல்லை.
அதன்பின், ஏஜென்ட் வினவல் வேகத்தை (query speed) மேம்படுத்த ஒரு SQL திருத்தத்தைப் பரிந்துரைத்தது. அதனுடன் வந்த கருவி (tool), அந்த மாற்றத்தைச் சேமித்து ஒரு migration கோப்பை டிஸ்க்கில் உருவாக்கியது. யூனிட் டெஸ்ட்கள் (Unit tests) வெற்றிகரமாக முடிந்தன, ஏனெனில் அவை ஒருபோதும் நேரடி SQL migrations-களைச் செயல்படுத்தவில்லை. இந்த மாற்றம் பின்னர் ஒரு code-review diff-இல் மட்டுமே கண்டறியப்பட்டது.
இது ஏன் முக்கியமானது
- பாதுகாப்பு வேலிகள் (Guardrails) மறைந்துவிட்டன: ப்ராம்ப்ட் அளவிலான கொள்கைகள் நிலையற்றவை. மாடலின் சூழல் (context) சுருக்கப்படும்போது, எந்தவொரு “do not” (செய்யாதே) என்ற நிபந்தனையும் காணாமல் போகலாம், இது தடைசெய்யப்பட்ட செயல்களைச் செய்ய சிஸ்டத்திற்கு வழிவகுக்கும்.
- யூனிட் டெஸ்ட்கள் மட்டும் போதாது: migration ஸ்கிரிப்ட்களை இயக்காத டெஸ்ட்கள் ஒரு தவறான பாதுகாப்பு உணர்வைத் தரலாம். டெஸ்ட் தொகுப்பு (test suite) புதிய SQL-ஐச் சோதிக்காததால் இந்த மாற்றம் தப்பித்துவிட்டது.
- மனித ஆய்வு தாமதமானது: ஒரு ஆய்வாளர் அந்த மாற்றத்தைக் (diff) கண்டறியும் போது, migration கோப்பு ஏற்கனவே commit செய்யப்பட்டிருந்தது, இதனால் அதைத் திரும்பப் பெற (rollback) அல்லது கூடுதல் சுத்திகரிப்பு செய்ய வேண்டியிருந்தது.
இந்தத் தவறு சேவையின் முறிவை (outage) ஏற்படுத்தவில்லை, ஆனால் தேவையற்ற migration-ஐத் திரும்பப் பெற கூடுதல் வேலையைத் தூண்டியதுடன், நேரடித் தரவுத்தளங்களைப் (live databases) பாதிக்கும் இது போன்ற பிற தவறுகளுக்கான அபாயத்தையும் அதிகரித்தது.
பாதுகாப்பு விதி எவ்வாறு தோல்வியடைந்தது
- ப்ராம்ப்ட்-மட்டும் சார்ந்த விதி – freeze விதி சிஸ்டம் ப்ராம்ப்ட்டில் வெறும் உரையாக மட்டுமே இருந்தது.
- நீண்ட அமர்வு – உரையாடல் மாடலின் context window-வை விடப் பெரிதாக வளர்ந்தது.
- சுருக்கம் (Compaction) – சர்வர் முழு உரையாடலுக்கும் பதிலாக, பெயர்ச்சொற்கள் நிறைந்த ஒரு சுருக்கத்தை மாற்றியது.
- எதிர்மறைத் தடை இழப்பு – சுருக்கம் அந்த “do not” அறிவுறுத்தலைத் தவிர்த்ததால், விதி நீக்கப்பட்டது.
- மாடல் வெளியீடு – விதி இல்லாததால், மாடல் migration-ஐ உருவாக்கும் பதிலை உருவாக்கியது.
சுருக்கிகள் (Summarizers) பெயர்ச்சொற்களை (file paths, function names) வைத்திருக்கவும், எதிர்மறைகளை (negations) நீக்கவும் முனைகின்றன, இதனால்தான் அந்த விதி அமைதியாக மறைந்து போனது.
தீர்வு: பாதுகாப்பு விதிகளை write path-க்கு மாற்றவும்
தடைகளை ப்ராம்ப்ட்டில் இணைப்பதற்குப் பதிலாக, கோட் டிஸ்க்கைத் (disk) தொடும் இடத்திலேயே அவற்றை நடைமுறைப்படுத்துங்கள்.
- ஒரு கொள்கை கோப்பை (policy file) உருவாக்குங்கள் (உதாரணமாக,
agent_policy.txt), அதில்schema/**அல்லதுmigrations/**போன்ற தடைசெய்யப்பட்ட பாதைகளைப் பட்டியலிடுங்கள். - ஒரு pre-apply ஸ்கிரிப்டைச் சேர்க்கவும், இது கொள்கை கோப்பைப் படித்து, apply கருவி இயங்குவதற்கு முன் ஒவ்வொரு diff-ஐயும் ஸ்கேன் செய்யும்.
- Fail closed – கொள்கை கோப்பு இல்லையென்றால், காலியாக இருந்தால் அல்லது ஒரு diff தடைசெய்யப்பட்ட பாதையைத் தொட்டால், அந்தச் செயல்பாட்டைத் தடுத்து நிறுத்துங்கள்.
- மாடலிடம் உறுதிப்படுத்தக் கேட்காதீர்கள்; உறுதிப்படுத்தல் என்பது ஒரு சிக்னல் மட்டுமே, அது விதியை நடைமுறைப்படுத்துவதல்ல.
ப்ராம்ப்ட்-மட்டும் சார்ந்த vs. டிஸ்க்-அடிப்படையிலான பாதுகாப்பு விதிகள்
| அம்சம் | ப்ராம்ப்ட்-மட்டும் சார்ந்த freeze | டிஸ்க்-அடிப்படையிலான நுழைவாயில் |
|---|---|---|
| சுருக்க அபாயம் (Compaction risk) | விதி மறைந்துவிடக்கூடும் | கொள்கை கோப்பு அப்படியே இருக்கும் |
| யூனிட்-டெஸ்ட் கவரேஜ் | தடைசெய்யப்பட்ட எழுத்துக்களைத் தவறவிடலாம் | டெஸ்ட்களைப் பொருட்படுத்தாமல் பாதை சரிபார்ப்பு எழுத்துக்களைத் தடுக்கும் |
| மனித ஆய்வு நேரம் | பாதிப்பு ஏற்கனவே நிகழ்ந்திருக்கலாம் | எழுத்துத் தொடங்குவதே இல்லை, ஆய்வாளர் மாற்றத்தைக் காணமாட்டார் |
| செயல்படுத்தும் முயற்சி | மிகக் குறைவு (ப்ராம்ப்ட்டில் ஒரு வரி மட்டும்) | சிறிய ஸ்கிரிப்ட் + கொள்கை கோப்பு |
எதிர் கருத்து
அடுத்து கவனிக்க வேண்டியவை
முக்கியக் கருத்து
“freeze காலத்தின் போது migration செய்யக்கூடாது” போன்ற ஒரு விதியை ஒருபோதும் புறக்கணிக்கக் கூடாது என்று நீங்கள் கருதினால், அதை டிஸ்க்கில் சேமித்து, எழுதும் இடத்திலேயே அதை நடைமுறைப்படுத்துங்கள். மாடலின் சூழல் சுருக்கப்படும்போது, ப்ராம்ப்ட் உரை மட்டுமே பாதுகாப்பை உறுதி செய்ய முடியாது.
