[{"data":1,"prerenderedAt":726},["ShallowReactive",2],{"navigation_docs_es":3,"-es-concepts-notation":188,"-es-concepts-notation-surround":721},[4,35,85,145],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Primeros pasos",false,"\u002Fes\u002Fgetting-started","es\u002F1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introducción","\u002Fes\u002Fgetting-started\u002Fintroduction","es\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Instalación","\u002Fes\u002Fgetting-started\u002Finstallation","es\u002F1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Estructura del proyecto","\u002Fes\u002Fgetting-started\u002Fproject-layout","es\u002F1.getting-started\u002F3.project-layout","i-lucide-folder-tree",{"title":26,"path":27,"stem":28,"icon":29},"Actualizar y desinstalar","\u002Fes\u002Fgetting-started\u002Fupgrade-uninstall","es\u002F1.getting-started\u002F4.upgrade-uninstall","i-lucide-refresh-cw",{"title":31,"path":32,"stem":33,"icon":34},"Canales","\u002Fes\u002Fgetting-started\u002Fchannels","es\u002F1.getting-started\u002F5.channels","i-lucide-radio-tower",{"title":36,"icon":6,"path":37,"stem":38,"children":39,"page":6},"Conceptos","\u002Fes\u002Fconcepts","es\u002F2.concepts",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Carriles y métodos","\u002Fes\u002Fconcepts\u002Flanes-and-methods","es\u002F2.concepts\u002F1.lanes-and-methods","i-lucide-route",{"title":46,"path":47,"stem":48,"icon":49},"Specs vivas y cambios","\u002Fes\u002Fconcepts\u002Fliving-specs","es\u002F2.concepts\u002F2.living-specs","i-lucide-book-open-check",{"title":51,"path":52,"stem":53,"icon":54},"Notación","\u002Fes\u002Fconcepts\u002Fnotation","es\u002F2.concepts\u002F3.notation","i-lucide-pen-line",{"title":56,"path":57,"stem":58,"icon":59},"QA y datos de prueba","\u002Fes\u002Fconcepts\u002Fqa-and-test-data","es\u002F2.concepts\u002F4.qa-and-test-data","i-lucide-clipboard-check",{"title":61,"path":62,"stem":63,"icon":64},"Conocimiento","\u002Fes\u002Fconcepts\u002Fknowledge","es\u002F2.concepts\u002F5.knowledge","i-lucide-brain",{"title":66,"path":67,"stem":68,"icon":69},"Scripts","\u002Fes\u002Fconcepts\u002Fscripts","es\u002F2.concepts\u002F6.scripts","i-lucide-file-code",{"title":71,"path":72,"stem":73,"icon":74},"Garantías","\u002Fes\u002Fconcepts\u002Fguardrails","es\u002F2.concepts\u002F7.guardrails","i-lucide-shield",{"title":76,"path":77,"stem":78,"icon":79},"Contexto de sesión","\u002Fes\u002Fconcepts\u002Fsession-context","es\u002F2.concepts\u002F8.session-context","i-lucide-gauge",{"title":81,"path":82,"stem":83,"icon":84},"Cómo mejora el kit","\u002Fes\u002Fconcepts\u002Fself-improvement","es\u002F2.concepts\u002F9.self-improvement","i-lucide-sprout",{"title":86,"icon":6,"path":87,"stem":88,"children":89,"page":6},"Guías","\u002Fes\u002Fguides","es\u002F3.guides",[90,95,100,105,110,115,120,125,130,135,140],{"title":91,"path":92,"stem":93,"icon":94},"Monorepo de app nuevo","\u002Fes\u002Fguides\u002Fnew-app-monorepo","es\u002F3.guides\u002F01.new-app-monorepo","i-lucide-boxes",{"title":96,"path":97,"stem":98,"icon":99},"Tu sitio web con Claude","\u002Fes\u002Fguides\u002Fcontent-site","es\u002F3.guides\u002F02.content-site","i-lucide-globe",{"title":101,"path":102,"stem":103,"icon":104},"Adoptar un proyecto existente","\u002Fes\u002Fguides\u002Fadopt-existing-project","es\u002F3.guides\u002F03.adopt-existing-project","i-lucide-git-merge",{"title":106,"path":107,"stem":108,"icon":109},"Un cambio, de principio a fin","\u002Fes\u002Fguides\u002Fspec-lane-change","es\u002F3.guides\u002F04.spec-lane-change","i-lucide-git-pull-request",{"title":111,"path":112,"stem":113,"icon":114},"Un cambio de vía rápida","\u002Fes\u002Fguides\u002Ffast-track-change","es\u002F3.guides\u002F05.fast-track-change","i-lucide-zap",{"title":116,"path":117,"stem":118,"icon":119},"El ciclo TDD","\u002Fes\u002Fguides\u002Ftdd-loop","es\u002F3.guides\u002F06.tdd-loop","i-lucide-repeat",{"title":121,"path":122,"stem":123,"icon":124},"Una pasada de QA","\u002Fes\u002Fguides\u002Fqa-pass","es\u002F3.guides\u002F07.qa-pass","i-lucide-clipboard-list",{"title":126,"path":127,"stem":128,"icon":129},"Datos de prueba","\u002Fes\u002Fguides\u002Ftest-data","es\u002F3.guides\u002F08.test-data","i-lucide-database",{"title":131,"path":132,"stem":133,"icon":134},"Publicar y actualizar","\u002Fes\u002Fguides\u002Freleasing-and-upgrading","es\u002F3.guides\u002F09.releasing-and-upgrading","i-lucide-rocket",{"title":136,"path":137,"stem":138,"icon":139},"Proponer mejoras","\u002Fes\u002Fguides\u002Fproposing-improvements","es\u002F3.guides\u002F10.proposing-improvements","i-lucide-lightbulb",{"title":141,"path":142,"stem":143,"icon":144},"Documentación para agentes","\u002Fes\u002Fguides\u002Fdocs-for-agents","es\u002F3.guides\u002F11.docs-for-agents","i-lucide-bot",{"title":146,"icon":6,"path":147,"stem":148,"children":149,"page":6},"Referencia","\u002Fes\u002Freference","es\u002F4.reference",[150,155,160,165,170,173,178,183],{"title":151,"path":152,"stem":153,"icon":154},"CLI","\u002Fes\u002Freference\u002Fcli","es\u002F4.reference\u002F1.cli","i-lucide-terminal",{"title":156,"path":157,"stem":158,"icon":159},"Configuración","\u002Fes\u002Freference\u002Fconfiguration","es\u002F4.reference\u002F2.configuration","i-lucide-settings",{"title":161,"path":162,"stem":163,"icon":164},"Skills","\u002Fes\u002Freference\u002Fskills","es\u002F4.reference\u002F3.skills","i-lucide-sparkles",{"title":166,"path":167,"stem":168,"icon":169},"Hooks","\u002Fes\u002Freference\u002Fhooks","es\u002F4.reference\u002F4.hooks","i-lucide-webhook",{"title":66,"path":171,"stem":172,"icon":69},"\u002Fes\u002Freference\u002Fscripts","es\u002F4.reference\u002F5.scripts",{"title":174,"path":175,"stem":176,"icon":177},"Cambios","\u002Fes\u002Freference\u002Fchangelog","es\u002F4.reference\u002F6.changelog","i-lucide-history",{"title":179,"path":180,"stem":181,"icon":182},"Plantillas","\u002Fes\u002Freference\u002Ftemplates","es\u002F4.reference\u002F7.templates","i-lucide-layout-template",{"title":184,"path":185,"stem":186,"icon":187},"Privacidad","\u002Fes\u002Freference\u002Fprivacy","es\u002F4.reference\u002F8.privacy","i-lucide-lock",{"id":189,"title":51,"body":190,"description":713,"extension":714,"links":715,"meta":716,"navigation":718,"path":52,"seo":719,"stem":53,"__hash__":720},"docs_es\u002Fes\u002F2.concepts\u002F3.notation.md",{"type":191,"value":192,"toc":706},"minimark",[193,315,323,328,331,438,452,456,482,485,488,596,605,608,615,670,677,688,702],[194,195,196,212],"table",{},[197,198,199],"thead",{},[200,201,202,206,209],"tr",{},[203,204,205],"th",{},"Paso",[203,207,208],{},"Estándar",[203,210,211],{},"Cómo se ve",[213,214,215,230,250,266,279,292,304],"tbody",{},[200,216,217,221,224],{},[218,219,220],"td",{},"Por qué y alcance",[218,222,223],{},"Propuesta",[218,225,226],{},[227,228,229],"code",{},"work\u002Fchanges\u002F004-invoices\u002Fproposal.md",[200,231,232,235,241],{},[218,233,234],{},"Requisito",[218,236,237],{},[238,239,240],"strong",{},"EARS",[218,242,243,246,247],{},[227,244,245],{},"### invoices.R2 — Totals"," + ",[227,248,249],{},"When an invoice is saved, the BFF shall round its total to 3 decimals.",[200,251,252,255,260],{},[218,253,254],{},"Aceptación",[218,256,257],{},[238,258,259],{},"BDD \u002F ATDD",[218,261,262,265],{},[227,263,264],{},"#### invoices.R2.S3 — Rounding edge @boundary"," + Given \u002F When \u002F Then",[200,267,268,271,276],{},[218,269,270],{},"Elegir casos",[218,272,273],{},[238,274,275],{},"ZOMBIES",[218,277,278],{},"una etiqueta por escenario",[200,280,281,284,287],{},[218,282,283],{},"Tests",[218,285,286],{},"Trazabilidad",[218,288,289],{},[227,290,291],{},"it(\"invoices.R2.S3 rounds 0.0005 up\")",[200,293,294,296,299],{},[218,295,126],{},[218,297,298],{},"ZOMBIES en los datos",[218,300,301],{},[227,302,303],{},"-- @fixture invoices.R2.S3 @boundary",[200,305,306,309,312],{},[218,307,308],{},"QA",[218,310,311],{},"Checklist",[218,313,314],{},"un ítem por escenario",[316,317,318,319,322],"p",{},"Los requisitos y escenarios se escriben en inglés: son la notación que revisa ",[227,320,321],{},"agent-kit specs lint",".",[324,325,327],"h2",{"id":326},"requisitos-ears","Requisitos EARS",[316,329,330],{},"EARS (Easy Approach to Requirements Syntax) limita cada requisito a una frase con una de estas formas:",[194,332,333,343],{},[197,334,335],{},[200,336,337,340],{},[203,338,339],{},"Patrón",[203,341,342],{},"Plantilla",[213,344,345,360,376,391,407,422],{},[200,346,347,350],{},[218,348,349],{},"Ubicuo",[218,351,352,353,356,357,322],{},"The ",[227,354,355],{},"\u003Csystem>"," shall ",[227,358,359],{},"\u003Cresponse>",[200,361,362,365],{},[218,363,364],{},"Evento",[218,366,367,368,371,372,356,374,322],{},"When ",[227,369,370],{},"\u003Ctrigger>",", the ",[227,373,355],{},[227,375,359],{},[200,377,378,381],{},[218,379,380],{},"Estado",[218,382,383,384,371,387,356,389,322],{},"While ",[227,385,386],{},"\u003Cstate>",[227,388,355],{},[227,390,359],{},[200,392,393,396],{},[218,394,395],{},"No deseado",[218,397,398,399,402,403,356,405,322],{},"If ",[227,400,401],{},"\u003Ccondition>",", then the ",[227,404,355],{},[227,406,359],{},[200,408,409,412],{},[218,410,411],{},"Opcional",[218,413,414,415,371,418,356,420,322],{},"Where ",[227,416,417],{},"\u003Cfeature>",[227,419,355],{},[227,421,359],{},[200,423,424,427],{},[218,425,426],{},"Complejo",[218,428,383,429,431,432,371,434,356,436,322],{},[227,430,386],{},", when ",[227,433,370],{},[227,435,355],{},[227,437,359],{},[316,439,440,441,444,445,448,449,451],{},"Nombra un sistema concreto (\"the BFF\", \"the invoices page\"), un comportamiento por requisito y resultados medibles (",[227,442,443],{},"within 15 minutes",", ",[227,446,447],{},"answers 409","). ",[227,450,321],{}," rechaza cualquier otra forma.",[324,453,455],{"id":454},"escenarios-bdd-atdd","Escenarios (BDD \u002F ATDD)",[316,457,458,459,462,463,466,467,470,471,474,475,478,479,322],{},"Cada requisito tiene escenarios escritos como ejemplos: ",[227,460,461],{},"Given"," un contexto, ",[227,464,465],{},"When"," una acción, ",[227,468,469],{},"Then"," un resultado observable (",[227,472,473],{},"And"," \u002F ",[227,476,477],{},"But"," amplían un paso). Se acuerdan antes del código y son los ",[238,480,481],{},"tests de aceptación",[324,483,275],{"id":484},"zombies",[316,486,487],{},"Elige los escenarios (y los casos de test) con ZOMBIES y etiqueta cada escenario con la categoría que cubre:",[194,489,490,503],{},[197,491,492],{},[200,493,494,497,500],{},[203,495,496],{},"Etiqueta",[203,498,499],{},"Pregunta",[203,501,502],{},"Ejemplo",[213,504,505,518,531,544,557,570,583],{},[200,506,507,512,515],{},[218,508,509],{},[227,510,511],{},"@zero",[218,513,514],{},"nada \u002F vacío",[218,516,517],{},"sin facturas → estado vacío",[200,519,520,525,528],{},[218,521,522],{},[227,523,524],{},"@one",[218,526,527],{},"el caso básico único",[218,529,530],{},"una línea suma bien",[200,532,533,538,541],{},[218,534,535],{},[227,536,537],{},"@many",[218,539,540],{},"varios, orden, duplicados",[218,542,543],{},"tres líneas en dos monedas",[200,545,546,551,554],{},[218,547,548],{},[227,549,550],{},"@boundary",[218,552,553],{},"límites y bordes",[218,555,556],{},"el 5.º login fallido bloquea; último día de un período",[200,558,559,564,567],{},[218,560,561],{},[227,562,563],{},"@interface",[218,565,566],{},"el contrato",[218,568,569],{},"403 para otra provincia; forma de la API",[200,571,572,577,580],{},[218,573,574],{},[227,575,576],{},"@exception",[218,578,579],{},"entrada mala, fallo",[218,581,582],{},"código inválido → error claro, nada guardado",[200,584,585,590,593],{},[218,586,587],{},[227,588,589],{},"@simple",[218,591,592],{},"el camino feliz",[218,594,595],{},"crear y verlo en la lista",[316,597,598,599,601,602,604],{},"Lint avisa cuando un requisito no tiene escenarios ",[227,600,576],{}," ni ",[227,603,550],{},". Las reglas de dinero, permisos y datos siempre los llevan.",[324,606,286],{"id":607},"trazabilidad",[316,609,610,611,614],{},"Un test que prueba un escenario ",[238,612,613],{},"empieza su nombre con el id del escenario",":",[616,617,622],"pre",{"className":618,"code":619,"language":620,"meta":621,"style":621},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","it(\"auth.R2.S2 shows the login page for an expired session\", () => { \u002F* … *\u002F })\n","ts","",[227,623,624],{"__ignoreMap":621},[625,626,629,633,637,641,645,647,650,653,657,660,664,667],"span",{"class":627,"line":628},"line",1,[625,630,632],{"class":631},"s2Zo4","it",[625,634,636],{"class":635},"sTEyZ","(",[625,638,640],{"class":639},"sMK4o","\"",[625,642,644],{"class":643},"sfazB","auth.R2.S2 shows the login page for an expired session",[625,646,640],{"class":639},[625,648,649],{"class":639},",",[625,651,652],{"class":639}," ()",[625,654,656],{"class":655},"spNyl"," =>",[625,658,659],{"class":639}," {",[625,661,663],{"class":662},"sHwdD"," \u002F* … *\u002F",[625,665,666],{"class":639}," }",[625,668,669],{"class":635},")\n",[316,671,672,673,676],{},"Un escenario probado sin test (una revisión visual, un flujo manual, una consulta SQL) lleva una fila ✅ en el ",[227,674,675],{},"tasks.md"," del cambio:",[616,678,682],{"className":679,"code":680,"language":681,"meta":621,"style":621},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","| auth.R2.S2 | manual: reloaded with an expired token, login shown | ✅ |\n","markdown",[227,683,684],{"__ignoreMap":621},[625,685,686],{"class":627,"line":628},[625,687,680],{},[316,689,690,693,694,697,698,701],{},[227,691,692],{},"agent-kit specs trace"," y ",[227,695,696],{},"agent-kit work trace NNN"," listan los escenarios ",[227,699,700],{},"✗ not covered","; preflight bloquea un cambio terminado que tenga alguno.",[703,704,705],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":621,"searchDepth":707,"depth":707,"links":708},2,[709,710,711,712],{"id":326,"depth":707,"text":327},{"id":454,"depth":707,"text":455},{"id":484,"depth":707,"text":275},{"id":607,"depth":707,"text":286},"Una notación estándar en cada paso — requisitos EARS, escenarios Given\u002FWhen\u002FThen, etiquetas ZOMBIES, ids de escenario en los nombres de los tests.","md",null,{"sourceHash":717},"7c391247ba68",{"icon":54},{"title":51,"description":713},"PBt5fFvUiRz1VJobTSGr3iygL4RXSkd20L3Jz8ZGGyk",[722,724],{"title":46,"path":47,"stem":48,"description":723,"icon":49,"children":-1},"SDD anclado a specs — las specs vivas son la fuente de verdad y los cambios traen deltas que se fusionan en ellas.",{"title":56,"path":57,"stem":58,"description":725,"icon":59,"children":-1},"Un checklist de QA generado desde las specs vivas, pasadas de QA con fecha y datos de prueba de Supabase que no pueden tocar producción.",1793099618191]