Ne chytřejší agent, ale kontrolovatelné jednotky práce
Jarred Sumner přepsal 535 496 řádků Bunu ze Zigu do Rustu za jedenáct dní. V jednu chvíli běželo 64 instancí Claudu naráz, špička byla 1 300 řádků za minutu, výsledkem 6 502 commitů. Zajímavé číslo tam ale žádné z těchhle není. Zajímavé je, co ten proces drželo, aby se nerozpadl do haldy kódu, který se tváří správně a přitom padá.
Test suite, který nevěděl, v jakém je jazyce
Základ byl existující testovací sada Bunu: zhruba 1,4 milionu asercí v 60 tisících testech, napsaných v TypeScriptu. To je klíč. Testy ověřovaly chování, ne implementaci — bylo jim jedno, jestli pod nimi běží Zig, nebo Rust.
Díky tomu se každá odchylka v přepisu okamžitě zviditelnila jako červený test, ne jako záhadný pád o tři dny později. Testy běžely průběžně na šesti platformách. Sada se stala arbitrem správnosti místo lidského úsudku — a jen proto mohl přepis vůbec fungovat. Kdyby testy sahaly na vnitřnosti, přepis do jiného jazyka by je zneplatnil a nebylo by o co se opřít.
Recenzent, který měl předpokládat, že je kód špatně
Druhý pilíř byl vzor, který stojí za převzetí i mimo AI. Jedna instance psala kód. Oddělené instance viděly jen diff, bez kontextu autora a jeho úvah, s jediným zadáním: předpokládej, že je to špatně.
Chytlo to chyby, které se zkompilovaly a přesto porušovaly kontrakty paměti. Box<uv::Pipe> unikl do asynchronní libuv operace a Rust ho uvolnil dřív, než operace doběhla — use-after-free. Převod záporného časového razítka ztratil znaménko, protože trunc() zaokrouhluje k nule, ne dolů. unwrap_or() s vedlejším efektem počítal hodnotu i tehdy, když nebyla potřeba. Autor s plným kontextem takové věci přehlédne, protože ví, jak to mělo fungovat. Recenzent bez kontextu ne. Model má stejné potvrzovací zkreslení jako člověk; oddělením rolí ho obejdeš.
Chyby kompilátoru jako fronta úkolů
Tým se nesnažil napsat rovnou správný kód. Nechal cargo check vychrlit zhruba 16 000 chyb a ty použil jako prioritizovaný seznam práce. Claude je seskupil podle crate a rozdělil mezi instance: jedna navrhuje opravu, dvě ji adversariálně kontrolují, jedna zapracuje připomínky.
Postup byl stupňovitý — nejdřív aby prošel cargo build, pak bun --version, pak jednotlivé podpříkazy, pak lokální testy, nakonec plné CI. Každá fáze odhalila to, co předchozí minula. Neohraničená složitost se tím proměnila v proud malých, ověřitelných úkolů.
Co si z toho odnést
Poučení není „AI zvládne velké přepisy". Je to, že velký přepis se stane zvládnutelným, když ho rozložíš na jednotky, u kterých jde strojově ověřit, že jsou správně. To ověření musí být nezávislé na implementaci — proto testy chování, ne testy vnitřností. A recenze najde víc, když recenzent nesdílí kontext autora. Tyhle tři věci jsou pravdivé, i když píše kód člověk. Až budeš příště plánovat migraci nebo velký refaktor, zeptej se nejdřív: co je tady arbitr správnosti, a nezávisí náhodou na tom, co zrovna měním.