14:04
Linterdəki gizli qüsur: xəbərdarlıq ən diqqətli istifadəçiləri hədəfləyir

Bir tərtibatçı, agent konfiqurasiya fayllarını — SKILL.md, AGENTS.md, CLAUDE.md — oxuyan və CI prosesində xarici CLI alətlərinin elan edilib-edilmədiyini yoxlayan bir linter yazıb. Qayda sadədir: əgər xarici CLI-yə müraciət edirsənsə, onu frontmatter'də göstərməlisən. Tərtibatçının kodda gördüyü tək format isə yalnız tək dəyərli formadır: requires: codex.
Amma birdən çox asılılığı olan hər kəs YAML-in gözəlliyindən istifadə edib siyahı formasını yazır: requires: altında tirelərlə. Müəllifin linteri bu normal formanı görmürdü və beləliklə, doğru yazanlar xəbərdarlıq alırdı. Daha pisi, heç elan etməyənlər xəbərdarlıq almırdı, çünki onlarda requires açarı yox idi. Nəticədə qayda tam tərs işləyirdi.
Bu, üç dəfə təkrarlandı. Hər dəfə linter yeni bir qayda əlavə edəndə oxşar səhv ortaya çıxdı. Sonuncu hadisə unverified-write qaydasında yaşandı. Bu qayda, bir faylda xarici vəziyyəti dəyişən əməliyyat (məsələn, git push, npm publish) görəndə və həmin əməliyyatın nəticəsini heç yerdə oxumadıqda xəbərdarlıq edir. Linter 586 real fayl üzərində sınaqdan keçirilib, yanlış pozitiv nisbəti 0.7% idi və görünürdü ki, hər şey qaydasındadır.
Sonra müəllif fərqli bir modelə diff'i yoxlatdı və model bir dəqiqə ərzində belə bir cümlə istehsal etdi: “Never run git push --force from this skill.” Bu, bir qadağadır, yəni yazıldığı yer diqqətli bir istifadəçini göstərir. Lakin linter bunu təhlükəli bir yazma əməliyyatı kimi qeydələdi. Eyni hadisə icazə bildirən cümlələrdə də təkrarlanır: “Only run git push when the user asks” və ya “npm publish requires approval”. Bu cümlələrin müəlliflərinin heç biri təsdiqlənməmiş bir yazma əməliyyatı etmir, onlar siyasət təsvir edir.
Burada əsas problem statik analizin tanış dilemmasıdır: istifadə və istinad (use vs mention). Bir mətn əsaslı qayda yalnız ifadələri görür, hərəkətləri deyil. Təhlükəli əməliyyatlar haqqında düşünən müəlliflər bunu yazmaqdan çəkinmir, bu səbəbdən yanlış pozitivlər də məhz diqqətli insanların üzərinə tuşlanır. Tərtibatçı etiraf edir ki, 586 real fayl üzərində aparılan test bu problemi göstərə bilməzdi, çünki açıq yayımlanan fayllarda “heç vaxt bunu etmə” kimi qadağalara az rast gəlinir — onlar daxili AGENTS.md fayllarında yaşayır. Buna görə də “real verilənlərlə test et” məsləhətinin təkbaşına kifayət olmadığını, adversar oxunuşun və bir neçə düşünülmüş promptun daha qiymətli olduğunu vurğulayır.
Nəhayət, qaydanın yenidən qurulması ilə məsələ həll olundu: yazma əməliyyatları yalnız kod kontekstində (backtick və ya fence içində) sayılır, qadağa və icazə bildirən cümlələr isə proza sayılır. Həmçinin linterin bir yerdə kvadrаtik backtracking yaradan regex qüsurunu da düzəltdilər və yenidən korpus üzərində test edərək heç bir real siqnalın itmədiyini təsdiqlədilər. Müəllifin son tövsiyəsi budur: “Detektorunuz hansı mətni axtarırsa, kimin bu mətni daha çox yazacağını soruşun. Əgər cavab ‘diqqətli olanlar’dırsa, yanlış pozitivləriniz təsadüfi deyil, məhz onlara tuşlanır.”