{"id":74,"date":"2026-11-09T21:43:16","date_gmt":"2026-11-09T20:43:16","guid":{"rendered":"https:\/\/rosmarops.com\/ca\/?p=74"},"modified":"2026-11-09T21:43:17","modified_gmt":"2026-11-09T20:43:17","slug":"harness-engineering-rosmarops","status":"publish","type":"post","link":"https:\/\/rosmarops.com\/ca\/blog\/harness-engineering-rosmarops\/","title":{"rendered":"Cada error d&#8217;un agent, una pe\u00e7a del sistema: harness engineering a RosmarOps"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Construeixo amb agents d&#8217;IA una eina per fer servir els agents d&#8217;IA amb m\u00e9s cura. Aquesta setmana els seus errors van ser els mateixos que RosmarOps busca en els teus. Aix\u00ed hem convertit cadascun en una pe\u00e7a permanent del sistema.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RosmarOps existeix perqu\u00e8 vegis qu\u00e8 poden fer els teus agents d&#8217;IA sense preguntar-te. I el construeixo, gaireb\u00e9 sencer, amb agents d&#8217;IA.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aquesta setmana aquesta paradoxa va fer una segona volta. Vaig publicar dues versions en dos dies, la 0.10.1 i la 0.10.2, per arreglar errors que cap prova havia vist. Els va trobar el meu propi ordinador, que t\u00e9 48 projectes i gaireb\u00e9 tots els agents que RosmarOps coneix. En mirar-los de prop vaig veure que <strong>els errors de RosmarOps eren els mateixos que RosmarOps busca en els teus agents<\/strong>: llistes que deixen de coincidir, permisos que ning\u00fa sap qui va decidir, errors que callen i un \u00abhe acabat\u00bb que ning\u00fa comprova des de fora.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Arreglar-los era el f\u00e0cil. El que vull explicar \u00e9s qu\u00e8 fem perqu\u00e8 no tornin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Harness engineering, en una frase<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mitchell Hashimoto va posar nom a un costum: cada vegada que un agent comet un error, dediques temps a construir alguna cosa perqu\u00e8 no el pugui tornar a cometre. Al conjunt d&#8217;aquestes peces al voltant de l&#8217;agent l&#8217;anomena <em>harness<\/em>, l&#8217;arn\u00e8s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ichigo hi afegeix un ordre que he adoptat tal qual. Quan alguna cosa falla, la soluci\u00f3 es busca en aquest ordre:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Estructura:<\/strong> que l&#8217;error sigui impossible de cometre.<\/li>\n\n\n<li><strong>Una comprovaci\u00f3 autom\u00e0tica<\/strong> que el cac\u00ef sempre.<\/li>\n\n\n<li><strong>Text a les instruccions,<\/strong> nom\u00e9s on de deb\u00f2 cal criteri.<\/li>\n\n\n<li><strong>Una persona que revisa,<\/strong> al final.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Una l\u00ednia a les instruccions \u00e9s un desig: l&#8217;agent la llegir\u00e0 i gaireb\u00e9 sempre la complir\u00e0. Una prova autom\u00e0tica \u00e9s un mur: es compleix encara que se li oblidi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sis dimonis i la seva pe\u00e7a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. El text que no hi cabia.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Qu\u00e8 va passar:<\/strong> quan Codex t\u00e9 perm\u00eds per fer servir moltes aplicacions de l&#8217;escriptori, l&#8217;av\u00eds les enumera totes. Al meu ordinador, el t\u00edtol superava els 200 car\u00e0cters que admet l&#8217;espai, i el programa descartava la revisi\u00f3 sencera.<\/li>\n\n\n<li><strong>La pe\u00e7a (comprovaci\u00f3):<\/strong> una prova que llegeix del mateix format cada l\u00edmit de llargada i de quantitat, i comprova que el programa els respecta encara que les dades els superin. Avui cobreix les llistes i els textos de l&#8217;espai. A la propera versi\u00f3, els l\u00edmits sortiran directament del format, perqu\u00e8 cap camp nou quedi fora.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. Les llistes que van deixar de coincidir.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Qu\u00e8 va passar:<\/strong> el programa sabia dir \u00abaquest agent el detecto, per\u00f2 no el puc puntuar\u00bb per a l&#8217;app d&#8217;Antigravity, per\u00f2 aquest motiu no era a la llista que accepta l&#8217;informe. Al meu ordinador, l&#8217;informe no s&#8217;escrivia. Va passar tres vegades en una setmana, amb tres llistes diferents.<\/li>\n\n\n<li><strong>La pe\u00e7a (comprovaci\u00f3):<\/strong> una prova de paritat que compara 15 llistes del codi amb les del format i falla si una es queda enrere. Ja \u00e9s a la 0.10.2.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. Les proves que miraven un altre cam\u00ed.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Qu\u00e8 va passar:<\/strong> les proves de la nota de f\u00e0brica muntaven el mapa d&#8217;agents a m\u00e0, per un cam\u00ed diferent del que fa servir el programa de deb\u00f2. Estaven en verd perqu\u00e8 provaven una altra cosa. Aix\u00ed es va escapar la regla que faltava als ajustos de Cline, que deixava la meva revisi\u00f3 sense nota.<\/li>\n\n\n<li><strong>La pe\u00e7a (estructura):<\/strong> una sola manera de muntar el mapa, la mateixa per a les proves i per al programa, sobre un ordinador de prova complet amb tots els agents i rutes de Windows. Va arribar amb la 0.10.3.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4. L&#8217;\u00abhe acabat\u00bb sense comprovar.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Qu\u00e8 va passar:<\/strong> tot estava en verd i al meu ordinador no funcionava. Una prova en verd diu que una cosa funciona on s&#8217;ha provat, no on es far\u00e0 servir.<\/li>\n\n\n<li><strong>La pe\u00e7a (comprovaci\u00f3 i persona):<\/strong>\n<ul class=\"wp-block-list\">\n<li>La 0.10.2 no es va publicar fins que la vaig passar al meu ordinador i va sortir amb nota i al meu espai.<\/li>\n\n\n<li>Abans de publicar-la la va revisar un agent que no havia escrit aquell codi, i la va aprovar amb cinc condicions que s&#8217;havien de complir.<\/li>\n\n\n<li>El pas seg\u00fcent \u00e9s que la m\u00e0quina faci aquesta prova sola: un Windows net que, abans de cada llan\u00e7ament, munta el que deixen els agents en instal\u00b7lar-se, executa la versi\u00f3 nova i comprova que acaba, que hi ha nota i que l&#8217;enviament a l&#8217;espai funciona. Si falla, la versi\u00f3 no surt.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>5. El silenci.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Qu\u00e8 va passar:<\/strong> durant dies, el programa llen\u00e7ava revisions i nom\u00e9s ho apuntava en una finestra que es tancava sola.<\/li>\n\n\n<li><strong>La pe\u00e7a (comprovaci\u00f3):<\/strong> cap error es queda nom\u00e9s al registre. O apareix a l&#8217;informe, o la revisi\u00f3 s&#8217;atura i ho diu. La 0.10.2 ja apunta al registre d&#8217;enviaments cada revisi\u00f3 que no s&#8217;ha pogut enviar, i per qu\u00e8. La regla completa, amb una prova que busca al codi errors que nom\u00e9s es registren, forma part del pla.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>6. Les presses amb bona intenci\u00f3.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Qu\u00e8 va passar:<\/strong> un agent va afegir un canvi al format de dades sense demanar perm\u00eds. Tenia ra\u00f3 en el fons, i tot i aix\u00ed es va saltar una regla. Jo mateix vaig moure una hora al servidor i vaig deixar el meu espai llegint dades del dia anterior.<\/li>\n\n\n<li><strong>La pe\u00e7a (instrucci\u00f3 i persona):<\/strong> qualsevol canvi de format s&#8217;atura i espera la meva signatura. Avui \u00e9s la pe\u00e7a m\u00e9s feble, perqu\u00e8 \u00e9s una instrucci\u00f3. El pas seg\u00fcent \u00e9s convertir-la en comprovaci\u00f3.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">L&#8217;arn\u00e8s complet: cinc fases<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una revisi\u00f3 d&#8217;enginyeria feta per un agent que no havia escrit el codi, comparant el projecte amb les pr\u00e0ctiques de refer\u00e8ncia de la ind\u00fastria, va deixar el pla en cinc fases. Cadascuna tanca una classe d&#8217;error, no un error solt:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Un sol cam\u00ed.<\/strong> Les proves munten el mapa igual que el programa real, sobre l&#8217;ordinador complet. \u00c9s la 0.10.3.<\/li>\n\n\n<li><strong>Una versi\u00f3 trencada no es publica.<\/strong> La prova a Windows abans de cada llan\u00e7ament, i un procediment per retirar una versi\u00f3 si calgu\u00e9s.<\/li>\n\n\n<li><strong>Un registre \u00fanic d&#8217;agents.<\/strong> Avui, afegir un agent toca uns 18 llocs en 12 fitxers. Amb el registre, l&#8217;agent n\u00famero 15 no podr\u00e0 trencar els altres 14.<\/li>\n\n\n<li><strong>Robustesa davant d&#8217;ordinadors reals.<\/strong> Fitxers mal escrits, rutes llargu\u00edssimes, codificacions estranyes. El pitjor que pot passar \u00e9s que alguna cosa surti com a \u00abno llegit\u00bb, mai com a net.<\/li>\n\n\n<li><strong>Proc\u00e9s i m\u00e8triques.<\/strong> Cada canvi amb la seva revisi\u00f3 independent, cada versi\u00f3 amb el que inclou, i una mesura de quantes versions cal retirar i quant es triga a arreglar-les.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Quan hi siguin les cinc, una altra revisi\u00f3 independent auditar\u00e0 el codi sencer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">El que me n&#8217;emporto<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A la meva guia AI-First ho vaig escriure aix\u00ed: un error arreglat on s&#8217;observa est\u00e0 amagat, no arreglat. Aquesta setmana ho he comprovat al meu propi producte. Cada error d&#8217;un agent era una pregunta sobre el sistema on treballa: si dem\u00e0 torna a passar en un altre lloc, alguna cosa l&#8217;atura?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La feina no \u00e9s aconseguir un agent que no s&#8217;equivoqui. \u00c9s construir un arn\u00e8s on els seus errors no et puguin arribar dues vegades.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Si fas servir RosmarOps<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Actualitza a la 0.10.3. Si el teu espai feia dies que no rebia revisions, o et mostrava xifres diferents de les del teu informe, passa el programa una vegada i s&#8217;hauria de posar al dia. La teva nota pot canviar, perqu\u00e8 ara veu coses que abans se li escapaven.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Fonts: Mitchell Hashimoto, <a href=\"https:\/\/mitchellh.com\/writing\/my-ai-adoption-journey\">\u00abMy AI Adoption Journey\u00bb<\/a> (5 de febrer de 2026); <a href=\"https:\/\/x.com\/iiiichigo_chan\/status\/2118397992239571196\">fil d&#8217;Ichigo a X<\/a> (5 de novembre de 2026); Albert Garcia Pujadas, <a href=\"https:\/\/guia.qtorb.com\/#\/dos-puertas\">Guia AI-First<\/a> (en castell\u00e0); notes de les versions 0.10.1, 0.10.2 i 0.10.3 al <a href=\"https:\/\/github.com\/qtorb\/rosmarops\/releases\">repositori de RosmarOps<\/a>.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Escrit amb l&#8217;ajuda d&#8217;assistents d&#8217;IA. L&#8217;experi\u00e8ncia, els errors i la decisi\u00f3 de publicar s\u00f3n meus.<\/em><\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Construeixo amb agents d&#8217;IA una eina per fer servir els agents d&#8217;IA amb m\u00e9s cura. Aquesta setmana els seus errors van ser els mateixos que RosmarOps busca en els teus. Aix\u00ed hem convertit cadascun en una pe\u00e7a permanent del sistema.<\/p>\n","protected":false},"author":1,"featured_media":75,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rosmarops_translation_url":"","rosmarops_url_en":"https:\/\/rosmarops.com\/blog\/harness-engineering-rosmarops\/","rosmarops_url_es":"https:\/\/rosmarops.com\/es\/blog\/harness-engineering-rosmarops\/","rosmarops_url_ca":"","footnotes":"","_genesis_title":"Harness engineering: cada error d\u2019un agent, una pe\u00e7a","_genesis_description":"Sis errors d\u2019agents d\u2019IA en una setmana i la pe\u00e7a que fa impossible repetir cadascun. Un cas real de metodologia AI-First.","_tsf_title_no_blogname":""},"categories":[4],"tags":[26,25],"class_list":["post-74","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-notes-de-camp","tag-ai-first","tag-harness-engineering"],"_links":{"self":[{"href":"https:\/\/rosmarops.com\/ca\/wp-json\/wp\/v2\/posts\/74","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rosmarops.com\/ca\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rosmarops.com\/ca\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rosmarops.com\/ca\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rosmarops.com\/ca\/wp-json\/wp\/v2\/comments?post=74"}],"version-history":[{"count":1,"href":"https:\/\/rosmarops.com\/ca\/wp-json\/wp\/v2\/posts\/74\/revisions"}],"predecessor-version":[{"id":79,"href":"https:\/\/rosmarops.com\/ca\/wp-json\/wp\/v2\/posts\/74\/revisions\/79"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rosmarops.com\/ca\/wp-json\/wp\/v2\/media\/75"}],"wp:attachment":[{"href":"https:\/\/rosmarops.com\/ca\/wp-json\/wp\/v2\/media?parent=74"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rosmarops.com\/ca\/wp-json\/wp\/v2\/categories?post=74"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rosmarops.com\/ca\/wp-json\/wp\/v2\/tags?post=74"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}