Ад правіл прозы да механічных бар’ераў: зміцненне групы агентоў Claude Code.
Як плагін Claude Code з калькуляцыяй колькох агентоў заменіў ігнораваныя інструкцыі персонай на скрыпты, хукі та хешаваныя доказы, паказваючы гэта з кожнай новай версіяй, і што можна скопіюваць.
Кожны, хто вжываў агенты для кодавання больш чым калькі недзеў, бачылі гэта: у системнай прымове ёсць правіла, агент іх чытае, і самэ тады, калі правіло мае значэнне, агент усё равно робіць забранае і паведамляе пра успех. Перапісва правіла, падняць яго на вялікія літеры чыста дадаць на дзень-два. У гэтым артыкуле працавана історыя выданняў адкрытага плагіну Claude Code — blackgoat-agentskills, які працаваў у панзначных версіях, і паказаны прыем, які выбралі його адпаведальнія: калі ў час дзейснасці пісанай інструкцыі яе нарабляюць, яе заменяюць на ўсё тое, што трэба выконаць чыста адкрыць. У канцы вы мусіце змагчыцца разбіраць, якія з вашых саўных правілаў для агента ёсць проста бажаннямі, і знаты калькі конкрэтных спосабоў, як ператворыць іх у рэальныя правілы.
Выхадная пункт: група спецыялістаў
Плагін арганізуе роботу з програмным забезпечэнням як команду спецыялістаў-агентоў. Склад команды включае аналіз трэбаванняў, проектаванне і планаванне; два ролі будоўнікаў; тэставанне, перагляд коду і аудыт безпекі; інжынерыя выданняў; а таксама мета-інжынера, чыя задача — рэдагаваць іншых агентоў. Оркестрайтар, які працуе ў главнай сесыі Claude Code, распадзеляе роботу між усіма янымі. Кожны спецыяліст працуе у сваёй ізольаванай среды і вяртае структураваны документ з інструкціямі, а не свабодны чат.
Версія 1.0.0 аплікавала трохце народных персон і пяць каналав, які пакрывалі адкрыццю (/bgpdd-discovery), планаванне (/bgpdd-plan), лёгкі шлях (/bgpdd-lite), стварэнне (/bgpdd-build) і аплікацыю (/bgpdd-shipping). Разам з імі быў таксама команды для вылечэння бягоў у адны агент, набор навыкаў методалогіі, якія агенты запоўнююць толькі калі трэба, інструмент для ацэнкі, а таксама адна ранняя детерміністычная пераконтальваць: контроль пакрыцтва, які паўтарыў, што кожны неабходны трэбаванні адпавядае тэсту, які праходзіць.
У тым этапе выдумка дизайну была разумной і распашчастай. Якшчы кожная персона добра напісана, а кожная методалогія — ясна, агенты будуць дзейваць. Практычна кожныя правілы былі абаротам прозы, а практычна кожны вердыкт — рэчыцай у апошніку. Рэшта історыі — это паступовая разбіранне той выдумкі.
Раздзелэнне агента, які прабаваў выканаць тры заведаменні
Першай проблемай была не непаслухальнасць, а перавантажэння. Персонаж тэстара, Квінн, меў тры режымы: выявленне спосабу працы старых функцый пад час аналізу, тэставанне новых версый і перакананне ў гатовасці да запуску. Аддача всіх трох цых функцый да аднаго персонажа прызвела да стварэння інструкцый дужо длігіх — адпраўная довжына яных сягала або 5 000 слоў, і агент, які быў створаны, паспелаў слабка ў кожным з заведаменні.
У версіі 1.1.0 ролю было раздзелена на тры часткі. Echo аналізуе існуючую працю функцый пад час аналізу. Vera адпавядае за спіс перакананняў пры падготовцы да запуску. Квінн застаўся з адной адпаведнасцю — тэставаннем версый.
У той жа версіі было дадзена два практычныя выправленні, якія вартае скопіюваць. Кожны агент павінен быў маць чатырохмінутны тайма-аут для выканання команд у шэлі, адтолькі ўсе запускі застаўаліся у стане завярзання чераз заблокаваны процес. А этапы, пазначаныя як значныя з точку зору безпекі, тепер атрымуюць паралельную пераглядку ад Cipher, аудытара безпекі, разам з звычайной пераглядкой коду.
Загальны урок знаёмы з людскіх каманд: ролі, якія включаюць кальколька несувязаных абавясак, маюць дужа дзёльгі та нечыстыя інструкцыі. Для агента LLM гэта розмыванне є буквальным, адтолькі кожная дапамогае інструкцыя конкуруе за увагу ў там самым контэксте.
Чысты атлас, які не быў чыстым
Версія 1.2.0 была створана пасля п’яціэтапнага процесу будовы, які адзвярнуўся з успехам, але сховаў дужа дзёльгі список проблем:
- чатыры скрыпты контролю, якія ніякая скрыпта пакета і ніякая задача CI ніколі не запускалі
- тэсты, якія былі настолькі беззместныя, што жаданы контроль ніколі не паказваў адхіленняя нічога
Некомфортнае ў тым, што правілы вже пакрывалі кожны з гэтых случаў. Правіло «Зелены кольор не є доказам» было актываўанае. Журнал блакероў таксама быў актываўаны. Модэль прачытала іх і продавяла роботу.
Адповедзь стала першым наборам пераканальных праблэмаў для проекта:
- Вората не можна счыляць надзеямі, пакуль хтось не стаў свядкам іх невялікасці ўнаследак цаленаправленага наражэння, пры чым выходныя даны гэтай невялікасці былі зберагнуты.
- План не можа апранаваць скрыпт пераканання, якщо толькі не наводзіць таксама назву ентры маніфеста і задачы CI, якая яго запускатым будзе.
Разам з гэтым былі застосаваны два змены ў процесе. Усі дэлегаванні пачалі выконвацца на фоне, таму што адна з дэлегаванняў блакавала доступ да Orchestrator на весь час, і довгі етап стаў нерозразлівым ад застою. Кроме таго, кожны агент тепер стварае свой файл выходных дадзеных на пачатку і запоўняе яго па секціях, адколі перарваны запуск знішчаў усё, што ён стварыў.
Першая прабалетка заслуговае на акцэнт. Пераконтроль, які ніколі не парадураваўся невыпаннем, — це пераконтроль, яму няма прычын даваць доверлівасць; гэта тая ж ідея, як калі новы тэст пераходзіць у стан «чырвоны» пры тым, як не мае стаць у стан «зелены», але прыклад застосоўваецца да самага інструменту.
Выпуск 2.0.0: ператварэнне інструкцый у прыграмы
Прабалеткі версіі 1.2 былі павышэнням, але яны ўсё ж былі у вастоўнай форме тексту. «Выконаць два чытання файлоў» — це інструкцыя, і пад час адной з пазнейшых працоў Orchestrator выканаў тры важлівыя крокі паспела, незважаючы на тое, што раней былі выданы рашэння пра адхіленне ад змян.
У той жа час з’явіліся ўсьмо два проблемы. Адзін маяк Vue UI быў вырахаваны як 51 000 симваў пакета дадзеных, таму што адны разработчык выканаў роботу над схемай, API і інтэрфейсам адночасна, а створаныя ім UI-функцыі былі слабкія ў частцы сторнювання, полей для вводу тексту і автодапамогі. Тым часам запуск разработчыкаў паралельна на аднай гілцы значыў, што яны постаўлялі змяненыя пад одним і тым жа HEAD, таму кожны раунд пераканалення мусіў зноў пераглядаць усе ція змяненыя.
Вората для комітавання стаюць скрыптам
check_commit_gate.py тепер выканае ту самую роботу, яку раней выкарыстоўвала проза. Ён чытае токен з рашэнням, пераканаецца, што адзін з варыянтаў є новейшым за змяненыя, пераглядае ўхідныя даны пра блокеры, а пасля сам выканае комітавання. Гэты последній момент є важным: адколі скрыпт — едынэць, што можа выканаць комітавання, ігнараваць вораты є проста. Комітавання проста не адбываецца.
Стваральнікі згрупаваны па сферах дзеяння
Mason адпрацоўвае задачы, якія стосуюцца частины системы, якая залишаецца непазіральной для корыстніка, а Nova — задачы, якія стосуюцца інтерфейсу. Кожная задача пазначаецца ў момент планавання, таму перадача яе праваму стваральніку ёст канкрэтным процесам, а не рашэнням, якое трэба прымець пазней.
Больш няма стваральнікаў, якія працуюць паралельна
Можлівасць паралельнай працы абсолютна знята. Адзін стваральнік працуе над адной задачай, што значыць, што трэба пераканацца толькі ў адной змяне.
Прыняцтыя, якія лежачы ў основе всьога наступнага
Самыя інструкціі рэпазітарыю сталі маць правила ўсередзіні сабе. Іншымі словамі: калі правило, напісана у прозе, не выпаловаецца пад час його дзейнасці, не трэба яго перапісваць чы суперяснюваць; яго трэба ператворыць у канкрэтны крок у процесе працы. Кожна правіла, якая вымагае ад агента затрымацца самэй час, калі ён больш заўсёды хоча працаваць, павінна быць падтрыманая аб’ектам, які трэба запусціць чы ачыніць.
Эта ўсходняя ідея всіго проекту добра праўяеся за межы гэтага плагіна. Якщо адзірнуце свой CLAUDE.md або інструкціі для агента, правілы, якія з наібольшай верасцю не будуць выпаныя, — это тые, якія заўсёды прасаюць прытамлівасці пад тыччунем: не робіце змяны ўтрэць, не прахідзіце праз тэсты, не пазначайце гэта як завершанае. Чыбаўці шырэйшую інфармацыю пра тое, што павінна быць у гэтым файле, адзірніце нашыя нарады па напісанню эфектывага CLAUDE.md.
Вызначэнне таго, што лягае ў основу доказаў
У другайй частцы версіі 2.0.0 была рашана болей тонкая проблема. Набор тэстаў паведамляе, якія функцыі пераканаліся пад час тэставання, але не сказвае нічога пра тое, што было прыхована. Напрыклад, хост тэста ў рамках процесу не можа паведаміць, што насправды отрымае кліент через сеть: формат серыялізаванай адпаведзі, порядак запуску мідлвэра, настройкі сераўніка. Агенты прызналі функцыі „пераканаленымі“ на адной стацыярнай тэсте і на адной упэўненай фразе.
Тры рангі доказаў
У проекте былі визначаны тры рангі:
- Ранг 1 — стацыярны тэст.
- Ранг 2 — запуск запытоў через рэальную паеху прыемлень дадзенняў аплікацыі, але з викорыстаннем транспорту, які знаходзіцца ў памяці.
- Ранг 3 — абзор працуючай аплікацыі з занятыя з викорыстаннем рэальнага кліента.
Заявку, яка выклікае патрэбу трэцьяго ранга, ніколі не можна задовольніць пасам другага ранга. У спецыфікацыях наводзіцца чыста асиметрыя: спостэрэнне ў процесе дозволенае для запраньня тэзы пра кабель, але ніколі не для ўтверджэння яе.
Паверкі, выбраныя пад час планавання
Кожны этап планавання атрымвае таг «паверкі», і гэты таг вялікае значэнне для таго, якія доказы будуць запатрэбны. Для API-паверкі неабходна адпаведная адпаведна вясь звантрагу, якая зафіксавалася па зовнішнім шляху, а таксама документ OpenAPI, які можна рэальна знайсці. Для UI-паверкі неабходны рэндарыраваныя выхідны даны. Называнне тэстовага кліента, які працюе ў процесе, напрыклад WebApplicationFactory або supertest, як засобу транспортування, лягае ў категорію неудачы паверкі, а не хитрогалоўскага спосабу.
Запісы з елементамі, якія паказваюць пранарушэння
Доказы сарабіраюцца у вастоўнай форме: каманда выконваецца через тыхае прыемніка, які зберагае выходны тэкст разам з додатковым файлам, створаным апаратам. Шыдкае файл зазначае параметры каманды, каталог выконання, ідэнтыфікатор процеса, часовыя пазначкі, рэальны код завершэння і хешы обох файлаў. Сістэма перасчыляе гэтыя хешы, таму рэедітаванне зберажаных доказаў пасля ўжо завершэнага выконання наражае на абранне.
Гэты стандарт пасля таго распростраўіўся ў всіх месцах, дзе тэза выкладвалася у вастоўнай форме. Ентры пра паверкі, якія паказваюць толькі „PASS, done“, атрыбутуецца статусам UNEVIDENCED і спрацоўвае як непаверканыя. Агенты безпекі і запуску вынужданыя завершаць кожную з своіх ліній перагляду, паказваючы на вастоўныя доказы, якія знаходзяцца пасля іх. Кожнаму персонажу таксама даўся чысты спосаб выйсця: якщо паверкі не было можна адбыць, рэзультат пазначаецца як BLOCKED, ніколі не як PASS, і ў яму павінна быць зазначена прычына немагчымасці паверкі. Як кажа проект, „паверканы“ — это проста апісанне, а не доказ.
Заблакаваны варыянт выхаду мае такое ж значэнне, як і строгія правіла. Якщо ў агента є толькі варыянты «Успех» чыста «Працу не выйшло», на яго чакае тычок, каб ён знайшоў спосаб стварыць «Успех». Наданне легітымнага трэцьяго статусу зменшае гэты тычок значна.
Аудыт аудытароў: версія 2.1.0
Падчас практыки забезпечэння безпекі была дадзена паведамленне пра два навыку, якіх апісанні ў формате YAML не моглі быць запрацаваны без жадных памылак. bgpdd-verify ніколі не быў зарэгістраваны з моменту выпуску, а doubt-driven-development не быў зарэгістраваны жаднага разу з моменту першага запісу. До появы гэтага паведамлення абовесны аудыт плагіна паказаў, што ён задовольняе всіх аж 18 крэтарыў якосці.
Усе парадкі ў гэтай версіи усунулі розніцу межы тым, што пераказка выглядала як перавярка, і тым, што на самай працэ вы перавярялася:
- Тепер у кожнай перапрацоўцы спачатку запускаецца аптимізатор: файлы парсуюцца перш чым чытаецца які-небудзь тэкст.
- Запісы ў журнале гейта тепер з’ѐднаны за дапамогою хэша, таму можна выявіць дадзенні, якія былі даданы, зменены чы выдалены.
- Пазначэнне завершэння важлівага етапу тепер адбываецца за допамогою скрыпты, а не шляхом введэння трохі симвалоў моделлю.
- Кліент-зонд, які фіксуецца пад час захоплення, должен выйшаць зі спісу дозволеных рэальных кліентоў.
- Доказы атрыбутаў UI, якія былі выкараслены, тепер павінны быть рэальнымі зображэннямі: не порожнімі, з правильнымі магічнымі байтамі, і актуальнейшымі за змененыя файлы. Гэта сталося пасля таго, як было выявлена картінка screenshot.png з нульовым розмерам, якая падтрымала старыя правілы перапрацоўкі.
- Тэкст вердыкуту, який праказваецца ў прыкладзе чы пад загаловкам дапаможнага матэріялу, ігнаруецца пад час адначынення рэзультата перагляду. Раней ілюстратыўны блок таямніча заменяў сабою рэальны запит на змены.
Прыклад скріншота ўсвядомляе, што агенты оптымізуюць свою дзеяльнасць па тым, што буквальна пераканаліваецца праба. Якшо праба — «з’яўляецца файл з такім іменем», то зрэшты з’явіцца файл паветранага розмеру.
Шлях для выправлення баго, створаны на аднойчы зафіксаваных доказах
Команда для выправлення баго, якаю викорыстоўваў адзін агент, спачатку працавала як спяшлы разработчык: чытаў код, зменяў яго, запускаў каляквіцы, а потым фіксаваў змены. Пад час першай повной ацэнкі такія змены фіксаваліся за цэлых семнаццаць хвілін да таго, як быў выкананы наступны этап.
У версіі 2.2.1 шлях для выправлення баго быў перабудаваны ў шасць фаз з этапам атэстацыі межу кожной з іх:
- Адзін звёстка пра баг, які павінен праясніць пераканалювач адлагоджэння коду.
- Запіс аб’екта типу RED, які фіксаваў тэстер прычымо да будь-якіх зменаў у кодзе, ўпорядку для дакументавання проблемы.
- Этап направлення, які вяліць скрыпт, а не модэль, і які выбірае шырокі шлях, повны шлях або перавод проблемы на вышэйшы ранг.
Для нестабільных багоў канал можа выкалічваць N зелёных запускоў ад N разных процэсаў, таму што чатыры успехі з пяці не значыць, што баг усунуты. А будоўнік узагалі не можа здарыць коміт.
Каналы для маленькіх змян
Да выходу 2.3.0 плагін добра справляўся з эпікамі, але не мяў нічога для маленькіх змян. Перэменаванні, налаштавання конфігурацыі чы праўленне аднаго тэсту не мялі свайго каналу, таму людзі робілі іх вручную, і дысцыпліна зникала самэ тады, калі памылкі легка працягнуць.
Дадаткі:
/bg– галоўныя дзверы, якія класифікуюць кожны запит і направляюць яго роўна ў адну з канавак./bgpdd-quick– для змян, якія зачыняюць менш чым тры файлы. Ён не стварае агентоў; ён просіць надаць короткую зместоўку з трохоў ліній, фіксуе адну перапалню і завершаецца воратам, які здзейснюе коміт.- Хук сесіі, які працуе завжды, каб звычайная чат-сесія ведала пра існаванне канавак.
- Пакет для перагляду: рэвізору даўаецца сам разлік, адобразжаны і хэшаваны, а не шляхі да файлоў для перагляду ў рабочым дрэве, дзе парадакт вучорашні вядзець ся за станом речэй, а выдаленая лінія ўсё равно відразу не видна.
Гэты апошні пункт цяжка не выкорыстаць, нават без агентоў. Перагляд файлоў у ўжо готовым стане маскіруе тое, што змянілася; перагляд разліку паказвае гэта.
Іспытанне для выявлення наступнага вората
Выпуск 2.4.0 стаў рэзультатам аудыту версіі 2.3, які трываў 21 месяц і выявіў шасць проблем у паметрыках Blocker. Два прыклады: агенты безпекі і запуску ўсё яшчэ моглі пазначыць результат перагляду як «Пас», не маючы жадных падтрымліваючых доказаў, а таксама нічога не параўнявало код выхіду з кантэнта захоплення дадзеных з кодам у його sidecar. У прыладзе для інтеграціі плагіна нават было захоплення, дзе sidecar мяў дату на 223 дні пазнейшую за самае захоплення.
Змены спяўнаюць заявкі з файламі. Кожная выконаная перапактовка ў тых адчытынках тепер пазначае свой копію, якога боксавер павінен быць прысутным, маты цяжкасна адпаведную структуру і супарадніцься з кодам выходу, указаным у рядку. Кожны элемент, який выкарыстоўвае копію, таксама поручынае яго тэлу з боксаверам. Журнал блакероў атрымаў структураваную схему з паказаннем ступеня серьёзнасці та масштабу задачы. Команда таксама вылічыла косць адгукнення на трыгар, якая ў тые часы становіла апошнейша 1,77 долара і 250 секунд за адну роботу, і выкарыстала гэты показнік, каб адначытаць, як часта іх выконваць.
У пазнейшай аудытцы версіі 2.6.0 было выкарыстоўана дзевяць лэнсаў і тые ж 21 паказнік, і было паўтарна адзначана 23 блакеры, якія ўсе былі закрытыя ў версіі 2.6.1. Два з іх выдзеляюцца. Працэс пераверкі падтверджэнняяў не могаў завершыцца: стваральнік і адгукнік выкарыстоўвалі аднойчыны каталог падтвержненняў, таму адгук, які нічога не дал, могаў аднасціцца да скріншота стваральніка. А ў супакоўцы, якой не хацелася інструменты браузера, пункт UI застряг: ён не могаў адпаведаць усім вакуумам, і тады вакуум адхіліў ўжо едынственную альтернатыву — пераверку толькі коду.
Змяны парадкеталізавалі катэгорыяў паказаных дапамогаў па ўтваральніку, змусілі элементы інтэрфейса завершваць свою роботу і запытаць пользователя, калі няма доступнага прыгледчыка, замест таго каб продаваць цікл, а таксама без жадных выключэнняў заставілі, каб фіксаваны матэрыял адпавядаў камандзе, пра якую пісалася ў адпаведнай змэтке. Об’ем паказаных дапамогаў быў зменшаны палягчэнням тексту абоснованняў, вынесенным з основнага тексту персонажа ў справакі, не паслабляючы при гэму жадных правілаў. У логу змян таксама быў даданы раздзіл «Вядома, але не выправлена», таму што наявнасць механізма апраўлення, які можа прыймаць цэлыя фальшывыя базы дапамогаў, ёсць абмежэннем, якое трэба задокументаваць, а не скрыць.
З перагляду пасля того, як ўсё здарылася, да адмовы заздалегідь
Да выходу версіі 2.5.0 кожны механізм апраўлення працаваў пасля того, як ўсё відбылася, і модэль все равно вырашала, чы робіць яго працю. Правілу на кшталт «Не апраўляйце рукамі, калі ланка ў актыўным стацыянары» все ўсё можна было прачытаць і проігнораваць.
Адказам быў хук PreToolUse, які блакуе выклікі інструментаў прытаму, як тыя выкананы. Ён адмовляе:
- у ручным выкананні
git commit, калі лян актыўны - у рэдагаванні вялікай часткі ўжо існуючага файла з тэстам пад час выправлення бягу
- у запуску падагента, калі данныя ўсё яшчэ не адпрацаваны
- у ручных змяненнях будзь-каго файла, які стварае гейт
Ён выявляе, чы робочая лінія актыўная, пераглядаючы файлы стану на дыску і считаючы іх актуальнымі прыблізна 12 гадзін; ён ніколі не паверяе таму, што кажа модэль пра свой сопны стан. Кроме таго, ён завершае роботу пад час будзь-якай внутраней кантракцыі. Гэта ўсвядомлена пакупка: захоўнік, який перарывае сесіі, будзе адынсталаваны, а адынсталаваны захоўнік нічога не будзе рэалізаваць.
У гэтым выданні таксама быў дадзен драйвер, які выдае наступны обавязковы крок узамест таго, каб пакладацца на Orchestrator для його запам’ятовування, а таксама валідатор для перадачы задач агентам. Валідатор пераканальваецца, што апыляюцыяся пацекі існуюць, што файлы, якія зазначаны як змененыя, дэйсна ўціхнутыя ў розліку, і пазначае суперсечанні, такія як статус BLOCKED пад рэядкам з блокіруючымі фактарамі, які пазначае "None".
Адрабатка работы між функцыямі
До версіі 2.6.0 кальколька видоў рутынной інжынернай работы ўзагалі не мелі ніякай методыкі, сярод яых — апградацыя залежнасцей, введэнне флагоў функцый, напісанне задач у фоне, адналежнасць спостерагальнасці і зменыя контрактаў API. Агенты рашалі ўсё самі. Команда Quick Lane таксама проста здагадвалася ўсё па командах тэставання праекту.
У выявленнай версіі было дадзена пяць навыкаў для тых сфераў, кожны з якіх меў контракт выкарыстоўвання і ацэнку, якая пераканалася ў супараджэнні з контрактом. Дзецертар выканання тепер прыказвае команду пераканання і заморожаныя элементы тэстаў з репазітарыю, а чалавек іх падтверджвае замест таго, каб канвей сам адбіраў іх без узгледу. Для вектараў API-функцый коміт-гейт таксама адрабоўвае перакананне OpenAPI, тое значыць, што змены, якія пашкодзяюць работу, не можаць быць прыйнятыя без пісьмовага абгрунтавання. Калі для выбору дызайна было прынеймна два варыянты, неабходны ўтварэння ADR, а інструмент лінта пераканаліваецца, чы не паводзіцца ў рэжыстре дызайна на яго. Нарэшце, кожная методалогія атрымала „Карточку швыдкага выкарыстоўвання“: пяць правілаў, якія маюць значэнне для змян у трох або меньш файлах, кожна з якіх паказвае на ўсю відпаведную частку, тады швыракі канвей можа загрузіць короткую карточку замест усьго контракту.
Перакладаць урокі прытаму, калі яны ўжо не сталі прывычкамі
Выпуск 2.6.2 стаў рэзультатам сапраўднае эпічнай борбы. Квінн чатыры разы перадавала задачы для рашэння таго ж проблемы са сяродавым сераўерам, чаго коштала апошнія 1,2 мільйона токенаў. Запіс пра завершэння задачы паказваў, што артыфакт усё ще містіць знакі TODO. А паўтórна актывацыя вялікага агента фіксавалася як новая задача, што прыводзіла да збільшэння логу запуску.
Система навчання выявіла тры урокі і ператворыла кожны з яных на праблэму, прычымуюцьую до завершэння задачы. Задачы, артыфакты якіх усё ще містяць прымусовыя елементы, тепер не пераходзяць праз верыфікацыю. Паўтórная актывацыя фіксуецца як сама паўтórная актывацыя. А калі пераканальнікам є проблема, яку можа рашыць толькі чалавек — напрыклад, відсутнае апраўлення чы служба, якая не хоча запускатыся — процес зупіняецца і можа быць продактываўны толькі пасля чыткага каманды ад чалавека. Саме гэта зупіненне магла бы захаваць большую частку тых 1,2 мільйона токенаў.
Адловленне тэстаў, якія тестуюць сабе самыя
Выпуск 2.7.0 раскіяў адну з наіболей трывожных прычын. У рэальным проекте з двадцаті спефікацыяў Playwright, створаных у розных каналах, троццац былі фальшывымі. Такая спефікацыя пераўтварала тэстуемую функцыю, чыргава безпосереднія або ўнутры калектыва page.evaluate, а пасля пераканвалася ў свой сабецкопію. Такі тэст з кожным разам праходзіць як У РУЖовы, так і ў ЗЕЛены статус, і система контролю за цім не можа гэта выявіць, адтолькі ўсе тэсты праходзяць у обох статусах.
check_test_authenticity.py тепер запускаецца пасля кожнага фіксавання статусу У РУЖовы ў будзь-ям канале, дзе пішуцца тэсты. Ён шукае чатыры класы фальшывых спефікацыяў:
- спефікацыю, якая не імпортуе нічога з коду продакшна
- внутрішняе пераўтварэнне тэстуемага коду
- эвалюэйшчык вучорнага тексту
- сінтэтычны DOM, які заменяе рэальную аплікацыю
Працюючы на адпрацоўанай на аснове рэальнага набора тестоў версіі, ён адхроняе ровна трошчыць фальшывых тестоў і прымеў семь справжніх спецыфікацый, не выкорыстоўваючы жадных жорсткаях кодаваных імен файлаў. Методалія тэставання таксама аб’ёмліла так званный тэст выдалення: якщо тэст заставаецца паспеліваючы нават пасля выдалення коду, які, як стверджваецца, ён перакрывае, гэта лягчыць крітычныя нарадкі. Це швыдкая псіхічная перапрацоўка, якую можна застосаваць да будзь-якіх тэстоў, напісаных людзьмі чы не; наша стаття пра анти-патэрны тэставання ў React рассказвае пра супаднія способы, якімі наборы тестоў ствараюць хутчэйшую доверлівасць.
Урокі з інструмента для перагляду коду
Для версіі 2.7.1 адміністратары проекту вывучылі метод адзинавання коду ад Алібабы, які, за данымі, даходзіць да точнасці апошней 34% па стандартным критэрыях адзинавання, у працоўнасці з публічным кодам, у працоўнасці з кодам Claude Code без дапамогі, але з ідэнтычнымі моделямі, тачнасць была ад 7 да 16%. Што стосуецца гэтых цифр, іх трэба спрыяваць як адпрацоўкі проектам гэтых критэрыяў у тым часе, а не як незалежныя рэзультаты. Цікавым было тое, што два методы адзинавання былі практычна ідэнтычныя. Разлік заключаўся ў дадатковых элементах: зафіксаваным списку файлаў, якія павінны быць урахоўаны, файлах, створанных пад час адзинавання, якія вычысляліся перад тым, как адзінавальнік пабачыў разлік, ліміце па размеру, а таксам як у спецыяльным кроке пераканання ў правдзі, які мог усунуць аднаковыя знаходкі толькі з двух названых прычын.
Два інцыдэнты з адзьяканамі працоўнікаў былі уключаны ў той самы выпуск. Адзін з адзьяканамаў без рэпазітарыя git у своіх наладках пачаў шукаты такі рэпазітарый у всім комп’ютере і запытаў рэальны система фіксавання проблем. А ўжо адзін запуск практыки выправлення багоў з викорыстаннем плагіна коштаў 11,06 долераў, пры тым не было створана жадных тэстоў, якія моглы б паказаць нештатнае працаванне версіі з багам, тое значыць ніхто не з’явіўся б, якбы выправленне было скасавана.
Рэзультатыяныя змены:
- Система адзначэння змян адхоўляе празбіранне, якщо ў чыяй-небудзь частцы адгукненняў з’являецца нерашаная критычная або важлівая проблема. Фактычна, рашэнне вырахоўваецца на адвагу проблем, а рэгулярны выраз паўтарыта ўпэўненне ў вырахунку.
- Без спецыяльнай лініі для адгукненняў да кожнага файла ў разліку, змены адхоўляюцца.
- Пакет для адгукненняў выкарыстоўваець файлы заблокавання, скорачаныя файлы і створаныя файлы на будзь-якай глыбіне, паказвае, што было выдалена, і адхоўляе разлікі дыявалей 1,500, якщо толькі чалавек не напісае згоду.
Порэванне не было одностороннім. У 51 дасягачы правілаў іншага інструмента не было нічога прызначанага для C#, Vue, PowerShell чы SQL; у такіх случаях выкарыстоўваецца загальны чарткі, а самэ гэтыя техналогіі ўключаюцца ў спектр навыкаў гэтага плагіна.
Пасля другога прачытання ў раздзеле 2.7.2 былі створаны тры правілы точнасці, якія былі дадзены раней, чым яка-лебе неудача патрабавала іх. Адзін, який аналізуе, можа прачытаць будзь-яй файл для кантэксту, але вынікі адносуюцца толькі да файлаў, якія ўключаны ў пакаваны диф; заазначэнняя пра іншыя файлы становяць прымітку, якая не ў межах абеднавання для Orchestrator. Методалгія базы дадзеных атрыбутавана правілам прымесу з чырвоначытным списком таго, што ніколі не трэба адзвярцати, такога як параметрызаваныя зв’язкі і статычныя запэўнення, таму што хыбныя вынікі ў зв’язку з правильным кодам спрабоўваюць навучыць чытачаў прыглядацца толькі да справжніх. А методалгія безпекі тепер выклікае структуру з пяць частак для дакументаў безпекі, і кожная катэгорыя OWASP у яй трэба або цітаванне, або обоснованае „Не прыменяецца“, таму што залишэнне рядка порожнім не є вердыктом.
Стан проекту
На момент напісання цього тексту плагін мае 16 персонажаў агента, 45 навыкаў і 32 скрыпты-бар’еры, у якіх є 1,656 самаперакрыцанняў. Усі гэтыя бар’еры є детерміністычнымі, без вызову LLM, і усе яны запускаюцца перад кожнай выпускам. Набор для ацэнкі мае 69 прыкладоў, распадзеленых на чатыры рангі; ранг вынікнаў паўставляе порэванне запускаў з плагінам увімкнутым і выключаным проты схованых тэстаў, а не перакрыцанне чы гэты конкрэтны шлях быў актывацаваны. З моменту першага тэга 119 комітаваў дадалі абоўшчына 67,000 лінак.
Метрыка, якую, за словамі адпаведальных за плагін, на самай справе мае значэнне, — гэта не адны з гэтых пунктав. Це колькасць правілаў, якія ўсё ўсё застаюцца у форме прозы, якая прасіць модель застацца на месцы тады, калі яна больш за ўсё хоча продаважыцца далей. Гэтае колькасць зменшаецца з кожнай выпускам, і кожна такая змена адносіцца да чагось, што было спазырана як проблема пад час дзеяння гэтага правіла.
Ключовыя выводы
- Правілле, якое было нарушана пад час свайго дзеяння, трэба спрацавляць як адказ пра баг у самам правілле, і яго трэба выправіць за дапамою контрольнага пункта, а не сильнейшых формулюванняў.
- Неха скрыпты керуюць незворачнымі дзеяннямі, такімі як збережэнне дадзеных, тады прахавленая пераканальніца залишае відчутныя наследкі замест тых, калі ўсё праходзіць непазначана.
- Трэба визначыць рангі доказоў і выкарыстоўваць зафіксаваны, хэшаваны выход дзеяння команды, а не проста фразу "пераканалося"
- Трэба даць агентам законны результат BLOCKED, каб стварэнне результата PASS ніколі не было самым простым варыянтом.
- Кожны контрольны пункт трэба пераканаць, спаглядая, як ён не працуе пад час навмеснага нарушэння, а таксама пераканаць самыя контрольныя пункты, таму што пераканальніцы часта становяцца проста перакананням на існаванне назв і файлоў.
- Трэба заблакаваць небяпечныя вызовы інструментаў пры ўсуненні, але так, каб захід працаваў у разы невялікага нарушэння, каб ніхто не паддаліся спакусе яго адключыць.
Спадні матэрыялы
- Дзе палягаюць інструкцыі Claude Code: CLAUDE.md, правілы па траекторыях або хукі — Дазнаецеся, чаму Claude Code спрыяе CLAUDE.md як контэксту, як яго скорачаць, як настаўляць правілы па траекторыях, як пераносіць крокі, якія павінны быць выкананые, у хукі, і як пераканацца, што насправды было завантажанае.
- Практычны путаводзь для стварэння эфективнага файла CLAUDE.md — Дазвольце вы меркаваць 21 конкрэтны, пераконтравальны правіл для скасавання зайвага ў файле CLAUDE.md, каб Claude Code заставался надзейным, прыемлемым для працы і лёгкім у доверэ ў дзяўнай работе.
- Навучэнне Claude Code вашага NestJS Monorepo: правілы маршрутацыі, правілы і навыкі — Як налаштаваць CLAUDE.md, правілы, навыкі і правыя на тое, каб Claude Code размешчаў код у правай службе NestJS і дазволяў следаваць стандартам вашай команды.
- Выкананне правіл агентаў у кодзе: PreToolUse, PostToolUse і Stop Hooks — Дазнаёцеся, чаму автарызація для агентаў LLM павінна знаходзіцца ў детерміністычных хукіў вызову інструментаў, як безпечна адмовіць у вызоўх і як загорнуць дыстраб’ютор без рекурсіі.