[{"data":1,"prerenderedAt":665},["ShallowReactive",2],{"guide-es":3},{"id":4,"title":5,"attribution":6,"body":7,"definition":656,"description":657,"extension":658,"eyebrow":659,"meta":660,"navigation":227,"path":661,"seo":662,"stem":663,"__hash__":664},"docs\u002Fes\u002Fguide.md","Cómo aplicar Context Architecture a un codebase existente",null,{"type":8,"value":9,"toc":641},"minimark",[10,14,17,26,29,34,37,40,51,55,58,61,94,97,101,104,107,139,147,157,161,164,177,180,192,196,202,205,292,295,299,302,305,310,318,321,325,344,350,365,369,384,387,398,402,425,431,437,443,447,450,456,460,466,472,489,492,575,581,593,597,603,607,637],[11,12,13],"p",{},"Un repo parte limpio y crece tres años. Las convenciones se separan. Los docs dejan de calzar con el\ncódigo. Los nombres de las carpetas te dicen qué framework armó la cosa, no qué hace la cosa.",[11,15,16],{},"Ahora pásaselo a un lector sin memoria: alguien en su primer día, o un agente de IA arrancado en frío.\nPídele un cambio. No puede saber qué significa nada, dónde va el cambio, ni cuál de dos patrones que\nconviven es el actual. El repo creció. Nadie lo diseñó para que se pudiera leer.",[11,18,19,20,25],{},"Ese es el problema que esto arregla. La ",[21,22,24],"a",{"href":23},"\u002Fes","especificación"," dice qué es Context Architecture y por\nqué. Esta página es la parte que haces con las manos: cómo aplicarla a un repo que ya tienes.",[11,27,28],{},"El \"ya tienes\" importa. Un proyecto nuevo parte con la estructura que le da su framework, y este\nproblema todavía no existe. Aparece después, cuando el código crece más allá de lo que una persona\nmantiene en la cabeza. Así que esto no es una forma de empezar un proyecto. Es una forma de arreglar\nuno. No estás construyendo una ciudad nueva, le estás poniendo nombres a las calles de una que ya se\ndesparramó.",[30,31,33],"h2",{"id":32},"antes-de-empezar-vale-la-pena","Antes de empezar: ¿vale la pena?",[11,35,36],{},"Tiene un costo real. La reorganización inicial, los checks que son código que tienes que mantener en\nverde, y un pequeño impuesto en cada pull request para que cada afirmación quede atada a un check.",[11,38,39],{},"Se paga en proporción a cuánto trabajo de agentes o de varias personas absorbe el repo. Vale la pena\nen un codebase que aguanta refactors, migraciones, features con spec, contribuciones de agentes. No\nvale la pena en un prototipo desechable ni en un problema que todavía no entiendes. Ahí el impuesto\ncuesta más de lo que devuelve, y saltártelo es lo correcto. Decirlo en voz alta es parte de la\ndisciplina.",[41,42,44],"callout",{"color":43},"neutral",[11,45,46,50],{},[47,48,49],"strong",{},"El único lector para el que diseñar."," Asume un lector que no guarda nada entre sesiones y solo sabe\nlo que el repo dice en voz alta. Un agente de IA es exactamente ese lector. Alguien recién llegado se\nle acerca. Debajo de todo hay un solo número: cuánto demora ese lector en hacer un cambio correcto.",[30,52,54],{"id":53},"el-orden-de-operaciones","El orden de operaciones",[11,56,57],{},"Hazlo de a poco. No detienes todo para reorganizar de una. Aterrizas un cambio acotado y reversible a\nla vez, y cada uno llega con el check que mantiene honesta su afirmación. Nada de reescribir todo de\ngolpe.",[11,59,60],{},"El orden va de lo más barato y seguro a lo más caro:",[62,63,64,68,71,79,82,85,88,91],"ol",{},[65,66,67],"li",{},"Lee el repo como un lector en frío, y nombra los modos de falla con los que choques.",[65,69,70],{},"Arregla los docs que mienten.",[65,72,73,74,78],{},"Pon ",[75,76,77],"code",{},"AGENTS.md"," en las fronteras de arriba.",[65,80,81],{},"Convierte el comentario que más repites en review en una regla de lint.",[65,83,84],{},"Desarma una carpeta cajón de sastre.",[65,86,87],{},"Haz que las capacidades se encuentren.",[65,89,90],{},"Avanza hacia una estructura por dominio, al final, y solo si se gana el costo de mover todo.",[65,92,93],{},"Conecta el bucle que evita que se vuelva a pudrir.",[11,95,96],{},"El resto de la guía es un paso por sección, y después un ejemplo completo.",[30,98,100],{"id":99},"paso-1-auditar-el-repo-como-un-lector-en-frío","Paso 1: auditar el repo como un lector en frío",[11,102,103],{},"Abre el repo como si nunca lo hubieras visto y no recordaras nada. Lee el árbol de primer nivel, luego\nlas fronteras, luego un puñado de archivos hoja. En cada nivel, una pregunta: ¿podría hacer un cambio\ncorrecto acá sin preguntarle a nadie? Cada \"no\" es un defecto que acabas de encontrar.",[11,105,106],{},"Los defectos vienen en cinco formas. Ninguno es culpa del modelo, y por eso un modelo mejor o un\nprompt más astuto no arregla ninguno:",[62,108,109,115,121,127,133],{},[65,110,111,114],{},[47,112,113],{},"Reimplementación."," La fuente de verdad no se podía encontrar, así que el lector reconstruye lo que ya existe.",[65,116,117,120],{},[47,118,119],{},"Estructura inventada."," No se impuso ninguna, así que el lector impone la suya.",[65,122,123,126],{},[47,124,125],{},"Obediencia a docs falsos."," Cita archivos borrados o contradice el código actual, con total confianza.",[65,128,129,132],{},[47,130,131],{},"Propagación de patrón obsoleto."," Copia el patrón más ruidoso aunque ese patrón esté muerto.",[65,134,135,138],{},[47,136,137],{},"Cara o sello con la ambigüedad."," Dos convenciones conviven, así que usa la que leyó primero.",[11,140,141,142,146],{},"Anota, por principio, un veredicto y la evidencia. Hazlo a mano, o carga el\n",[21,143,145],{"href":144},"\u002Fes\u002Fskill","skill de Context Architecture"," en tu agente y deja que escriba el informe.",[11,148,149,152,153,156],{},[47,150,151],{},"Cómo se ve esto."," En un servicio de pagos, la primera pasada encuentra la lógica de reembolsos\nrepartida en tres carpetas (una reimplementación esperando para ocurrir), un ",[75,154,155],{},"README"," que apunta a un\nscript de deploy borrado hace meses (docs falsos) y dos helpers de fecha con firmas distintas (un cara\no sello). Tres modos de falla nombrados antes de tocar una línea.",[30,158,160],{"id":159},"paso-2-arreglar-el-context-rot-primero","Paso 2: arreglar el context-rot primero",[11,162,163],{},"Parte por hacer que los docs dejen de mentir. Un doc que cita un archivo borrado o contradice el código\nes peor que no tener doc, porque un lector con confianza hace lo que dice.",[11,165,166,167,169,170,172,173,176],{},"Encuéntralo a mano o con un script: saca cada ruta de archivo, comando, símbolo y enlace de tu\n",[75,168,155],{},", tus archivos ",[75,171,77],{}," y ",[75,174,175],{},"CLAUDE.md",", y tus documentos de diseño, y verifica que cada uno\nsiga existiendo o siga corriendo. Arregla cada mentira contra lo que el código realmente hace hoy.",[11,178,179],{},"Después haz que el rot sea imposible de traer de vuelta. Agrega un test que afirme que cada ruta que\nlos docs citan sigue existiendo en disco. Ahora \"este doc es preciso\" es una afirmación con un check\ndetrás, en vez de un deseo.",[11,181,182,184,185,187,188,191],{},[47,183,151],{}," El ",[75,186,155],{}," documenta un ",[75,189,190],{},"deploy.sh"," que se borró hace un año. Sacas la referencia\nmuerta, escribes el comando real y agregas ese test de rutas. La próxima vez que alguien mueva un\narchivo por debajo de un doc, la suite se pone roja en el mismo pull request, no en producción seis\nsemanas después.",[30,193,195],{"id":194},"paso-3-poner-agentsmd-en-las-fronteras-de-arriba","Paso 3: poner AGENTS.md en las fronteras de arriba",[11,197,198,199,201],{},"El contexto va junto al código que describe, en cada frontera que es dueña de algo. Puesto ahí,\nenvejece al mismo ritmo que el código y lo lee el mismo agente que está por editarlo. Empieza por la\nraíz y los dos o tres directorios de más tráfico. Ahí cada ",[75,200,77],{}," compra la mayor legibilidad.",[11,203,204],{},"Escribe solo lo que no puedes sacar leyendo el código: la fuente de verdad, los invariantes, la deuda\ntécnica que aceptaste a propósito, y el razonamiento que un spec dejó atrás. Mantén cada uno corto.",[206,207,212],"pre",{"className":208,"code":209,"language":210,"meta":211,"style":211},"language-markdown shiki shiki-themes material-theme-lighter github-light github-dark","# AGENTS.md (billing)\n\nDueño de la facturación, los reembolsos y el calendario de cobranza.\n\n## Fuente de verdad\nLos precios vienen del paquete `pricing-engine`, nunca hardcodeados acá.\n\n## Invariantes\n- Un reembolso nunca excede el monto capturado. Lo hace cumplir `refunds\u002Fguard.test.ts`.\n- Todo el dinero es enteros en centavos, sin floats. Lo hace cumplir la regla lint `no-float-money`.\n\n## Deuda técnica aceptada\nLa ruta legacy `chargeV1` se queda hasta la migración 2026-Q3. No la extiendas.\n","markdown","",[75,213,214,222,229,235,240,246,252,257,263,269,275,280,286],{"__ignoreMap":211},[215,216,219],"span",{"class":217,"line":218},"line",1,[215,220,221],{},"# AGENTS.md (billing)\n",[215,223,225],{"class":217,"line":224},2,[215,226,228],{"emptyLinePlaceholder":227},true,"\n",[215,230,232],{"class":217,"line":231},3,[215,233,234],{},"Dueño de la facturación, los reembolsos y el calendario de cobranza.\n",[215,236,238],{"class":217,"line":237},4,[215,239,228],{"emptyLinePlaceholder":227},[215,241,243],{"class":217,"line":242},5,[215,244,245],{},"## Fuente de verdad\n",[215,247,249],{"class":217,"line":248},6,[215,250,251],{},"Los precios vienen del paquete `pricing-engine`, nunca hardcodeados acá.\n",[215,253,255],{"class":217,"line":254},7,[215,256,228],{"emptyLinePlaceholder":227},[215,258,260],{"class":217,"line":259},8,[215,261,262],{},"## Invariantes\n",[215,264,266],{"class":217,"line":265},9,[215,267,268],{},"- Un reembolso nunca excede el monto capturado. Lo hace cumplir `refunds\u002Fguard.test.ts`.\n",[215,270,272],{"class":217,"line":271},10,[215,273,274],{},"- Todo el dinero es enteros en centavos, sin floats. Lo hace cumplir la regla lint `no-float-money`.\n",[215,276,278],{"class":217,"line":277},11,[215,279,228],{"emptyLinePlaceholder":227},[215,281,283],{"class":217,"line":282},12,[215,284,285],{},"## Deuda técnica aceptada\n",[215,287,289],{"class":217,"line":288},13,[215,290,291],{},"La ruta legacy `chargeV1` se queda hasta la migración 2026-Q3. No la extiendas.\n",[11,293,294],{},"Mira los invariantes: cada uno nombra el check que lo hace cumplir. Ese es todo el punto. Un invariante\nsin nada detrás es solo una línea nueva que se puede pudrir. Si el check todavía no existe, escríbelo en\nel mismo cambio, o redacta la línea como un hueco conocido, no como una garantía.",[30,296,298],{"id":297},"paso-4-codificar-la-convención-más-repetida","Paso 4: codificar la convención más repetida",[11,300,301],{},"Toma el comentario que más dejas en review, el que vive solo en la cabeza de tu equipo, y ponlo en la\ncadena de herramientas. Una convención que un agente no puede leer es una convención que va a romper,\nsiempre.",[11,303,304],{},"Este es el movimiento en el que se apoyan los demás pasos. Cuando una afirmación tiene que sostenerse,\nasí se sostiene: una regla de lint que enuncia la convención y falla en el mismo lugar, o un tipo que\nhace que lo incorrecto no compile.",[11,306,307,309],{},[47,308,151],{}," El comentario que más dejas es \"importa desde la raíz del paquete, no rutas\nprofundas\". Hoy vive en la cabeza de quienes revisan, así que un agente lo rompe en su primer commit.",[206,311,316],{"className":312,"code":314,"language":315,"meta":211},[313],"language-text","# antes: una convención que vive en la cabeza de quienes revisan\n\"siempre importar desde la raíz del paquete, nunca rutas profundas\"\n\n# después: la convención, escrita y exigida\n.oxlintrc.json   # una regla no-restricted-imports que falla la ruta profunda en CI\n","text",[75,317,314],{"__ignoreMap":211},[11,319,320],{},"Una vez que la regla está en el linter, la ruta profunda falla al toque, con un mensaje que cita la\nregla, no a quien revisó y justo estaba prestando atención ese día.",[30,322,324],{"id":323},"paso-5-nombrar-una-frontera-de-cajón-de-sastre","Paso 5: nombrar una frontera de cajón de sastre",[11,326,327,330,331,330,334,330,337,330,340,343],{},[75,328,329],{},"utils\u002F",", ",[75,332,333],{},"common\u002F",[75,335,336],{},"helpers\u002F",[75,338,339],{},"core\u002F",[75,341,342],{},"lib\u002F",". Acá es donde la responsabilidad va a morir. Nada en el\nnombre frena al código no relacionado, así que la carpeta crece para siempre. Elige la peor y divídela\nen carpetas cuyos nombres digan, cada uno, de qué son dueñas.",[206,345,348],{"className":346,"code":347,"language":315,"meta":211},[313],"# antes\nsrc\u002Futils\u002F        # 40 archivos no relacionados\n\n# después\nsrc\u002Fpricing\u002F      # la matemática de precios que estaba escondida en utils\nsrc\u002Fauth-session\u002F # los helpers de sesión que estaban escondidos en utils\nsrc\u002Fshared\u002F       # lo que es genuinamente genérico, chico y sin dependencias\n",[75,349,347],{"__ignoreMap":211},[11,351,352,353,356,357,360,361,364],{},"El nombre está haciendo el trabajo. Una carpeta llamada ",[75,354,355],{},"pricing"," resiste el código que no es sobre\npricing, porque deja de calzar. Si no puedes nombrar una frontera con precisión, la frontera está mal, y\n",[75,358,359],{},"shared"," no es la respuesta. Un ",[75,362,363],{},"shared\u002F"," chiquito para un formateador de fechas o un tipo result está\nbien. La deuda es echar mano del nombre genérico para esquivar la pregunta de dónde va algo.",[30,366,368],{"id":367},"paso-6-hacer-las-capacidades-descubribles","Paso 6: hacer las capacidades descubribles",[11,370,371,372,375,376,379,380,383],{},"Una capacidad que un agente no puede encontrar es, para ese agente, una capacidad que no existe.\nSimplemente la rehace, o la salta. Mueve tus scripts, generadores y comandos a lugares predecibles y\nnombrados, y nómbralos por lo que hacen: scripts de ",[75,373,374],{},"package.json",", un directorio ",[75,377,378],{},"scripts\u002F"," o\n",[75,381,382],{},"skills\u002F",", comandos que de verdad escribiste.",[11,385,386],{},"Mejor todavía, genera la lista de capacidades a partir de esas rutas convencionales en vez de mantenerla\na mano, y testea que la lista esté completa. Una lista mantenida a mano es una afirmación más esperando\npara pudrirse.",[11,388,389,391,392,394,395,397],{},[47,390,151],{}," Tres scripts de deploy y de seed viven en el directorio personal de un ingeniero y\nun hilo de Slack que nadie encuentra. Los mueves a ",[75,393,378],{}," con nombres que dicen qué hacen y los\nlistas en ",[75,396,374],{},". El siguiente agente los encuentra donde mira primero, en vez de escribir un\ncuarto.",[30,399,401],{"id":400},"paso-7-avanzar-hacia-una-estructura-por-dominio-al-final","Paso 7: avanzar hacia una estructura por dominio (al final)",[11,403,404,405,330,408,411,412,415,416,330,419,330,422,424],{},"El primer nivel debería decir qué hace el sistema, no qué framework lo armó: ",[75,406,407],{},"billing\u002F",[75,409,410],{},"onboarding\u002F",",\n",[75,413,414],{},"payments\u002F",", no ",[75,417,418],{},"controllers\u002F",[75,420,421],{},"services\u002F",[75,423,329],{},". El framework vive un nivel más abajo, dentro del\ndominio al que sirve.",[11,426,427,428,430],{},"Este es el movimiento caro y el más propenso a romper imports, así que va al final y va en tajadas. A\nmenudo un movimiento parcial más un ",[75,429,77],{}," en la raíz que explica la estructura hacia la que migras\ncompra más legibilidad, por archivo movido, que reorganizar todo de una.",[206,432,435],{"className":433,"code":434,"language":315,"meta":211},[313],"# antes: organizado por capa técnica\nsrc\u002F\n  controllers\u002F   services\u002F   models\u002F   utils\u002F\n\n# después: organizado por dominio, el framework un nivel más abajo\nsrc\u002F\n  billing\u002F\n    controllers\u002F   services\u002F   models\u002F   # el framework, dentro del dominio al que sirve\n  onboarding\u002F\n  payments\u002F\n",[75,436,434],{"__ignoreMap":211},[11,438,439,440,442],{},"Evita que se devuelva con una regla de lint que impide que el código de dominio se filtre a una carpeta\nde capa, y mantén la estructura objetivo en el ",[75,441,77],{}," raíz para que un lector que cae a mitad de la\nmigración sepa hacia dónde es adelante.",[30,444,446],{"id":445},"paso-8-instalar-el-metabolismo","Paso 8: instalar el metabolismo",[11,448,449],{},"La versión madura no solo revisa el contexto, lo alimenta. Un repo que se revisa a sí mismo no puede\npudrirse en silencio. Un repo que se alimenta a sí mismo absorbe conocimiento nuevo en el momento en que\nse crea.",[11,451,452,453,455],{},"Una línea en el ",[75,454,77],{}," raíz y en la checklist de review lo logra: cuando un pull request agrega una\nfuente de verdad o un invariante, lo documenta en ese mismo pull request, con un check detrás. Ahora el\ncontexto crece con el sistema en vez de ir seis meses atrás.",[30,457,459],{"id":458},"un-ejemplo-completo-de-principio-a-fin","Un ejemplo completo, de principio a fin",[11,461,462,463,465],{},"Un servicio que empezó como una app de un framework y creció tres años. El árbol grita el framework, no\nel producto, y el único doc es un ",[75,464,155],{}," que está medio equivocado.",[206,467,470],{"className":468,"code":469,"language":315,"meta":211},[313],"# antes\nsrc\u002F\n  controllers\u002F      # 22 archivos, dominios mezclados\n  services\u002F         # 18 archivos, dominios mezclados\n  models\u002F\n  utils\u002F            # el cajón de sastre\n  helpers\u002F          # un segundo cajón de sastre\nREADME.md           # apunta a un script de deploy borrado el año pasado\n",[75,471,469],{"__ignoreMap":211},[11,473,474,475,330,477,330,479,482,483,485,486,488],{},"Pídele a un agente \"agregar un flujo de reembolso parcial\" acá y míralo chocar con tres de los cinco\nmodos de falla en una sola tarea: no encuentra dónde viven los reembolsos (repartidos entre\n",[75,476,418],{},[75,478,421],{},[75,480,481],{},"models\u002F","), rehace matemática de dinero que ya está en ",[75,484,329],{},", y sigue el\n",[75,487,155],{}," hacia un script de deploy que ya no está.",[11,490,491],{},"El arreglo, en el orden de arriba, sin un solo commit de golpe:",[62,493,494,509,518,528,550,561],{},[65,495,496,499,500,502,503,505,506,508],{},[47,497,498],{},"Context-rot."," Saca la referencia muerta al deploy del ",[75,501,155],{},", escribe el comando real, agrega un\ntest de que cada ruta que el ",[75,504,155],{}," y los ",[75,507,77],{}," citan sigue existiendo.",[65,510,511,514,515,517],{},[47,512,513],{},"Contexto embebido."," Un ",[75,516,77],{}," raíz (qué posee el servicio, la estructura hacia la que migra) y\nuno en el área de más tráfico.",[65,519,520,523,524,527],{},[47,521,522],{},"Codificar."," El comentario de review más repetido era \"el dinero es enteros en centavos\". Eso pasa a\nser una regla lint ",[75,525,526],{},"no-float-money",".",[65,529,530,533,534,172,536,538,539,542,543,546,547,549],{},[47,531,532],{},"Nombrar."," Divide ",[75,535,329],{},[75,537,336],{},": la matemática de dinero pasa a ",[75,540,541],{},"money\u002F",", el código de\nsesión a ",[75,544,545],{},"auth-session\u002F",", el resto genuinamente genérico se queda en un ",[75,548,363],{}," chico.",[65,551,552,555,556,558,559,527],{},[47,553,554],{},"Descubrible."," Los scripts ad-hoc se mueven a ",[75,557,378],{}," con nombres reales, listados en\n",[75,560,374],{},[65,562,563,566,567,570,571,574],{},[47,564,565],{},"Por dominio, en tajadas."," Mueve ",[75,568,569],{},"refunds"," primero: un ",[75,572,573],{},"billing\u002Frefunds\u002F"," que mantiene juntos su\ncontroller, su service y su model. El siguiente agente que pregunte por reembolsos los encuentra en un\nsolo lugar.",[206,576,579],{"className":577,"code":578,"language":315,"meta":211},[313],"# después\nsrc\u002F\n  billing\u002F\n    AGENTS.md       # invariantes y la fuente de verdad de billing\n    refunds\u002F        # controller + service + model, juntos\n    invoices\u002F\n  auth-session\u002F\n  money\u002F            # la matemática que estaba enterrada en utils, ahora nombrada y exigida\n  shared\u002F           # chico, genérico, sin dependencias\nscripts\u002F            # nombrados, listados en package.json\nAGENTS.md           # las reglas de la casa, y la estructura hacia la que se migra\nREADME.md           # preciso, y un test lo mantiene así\n",[75,580,578],{"__ignoreMap":211},[11,582,583,584,586,587,589,590,592],{},"Ahora la misma tarea aterriza en ",[75,585,573],{},", contra un ",[75,588,77],{}," que enuncia el invariante del\nreembolso, reutilizando el paquete ",[75,591,541],{}," al que la regla lint ya apunta. Los modos de falla no tienen\ndónde ocurrir.",[30,594,596],{"id":595},"correrlo-con-el-skill","Correrlo con el skill",[11,598,599,600,602],{},"El paso 1 y casi todos los movimientos de arriba son cosas que un agente puede correr. El\n",[21,601,145],{"href":144}," es un solo archivo que cargas en tu agente: lee el repo como\nun lector en frío, encuentra los docs que mienten y te devuelve el backlog en el orden de arriba.\nApúntalo a tu repositorio y empieza por lo que marca primero.",[30,604,606],{"id":605},"hacia-dónde-seguir","Hacia dónde seguir",[608,609,610,616,623,630],"ul",{},[65,611,612,613,615],{},"La ",[21,614,24],{"href":23},": la regla, los cuatro pilares, el mecanismo y los ocho principios completos.",[65,617,612,618,622],{},[21,619,621],{"href":620},"\u002Fes\u002Fcomparacion","comparación"," con context engineering y harness engineering: qué capa diseña cada\nuna, y por qué esta se sitúa debajo de ellas en tiempo de diseño.",[65,624,625,626,629],{},"El ",[21,627,628],{"href":144},"skill",": para correr el trabajo con tu propio agente.",[65,631,625,632,636],{},[21,633,635],{"href":634},"\u002Fes\u002Fglosario","glosario",": los términos que se usan en la especificación, definidos.",[638,639,640],"style",{},"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":211,"searchDepth":224,"depth":224,"links":642},[643,644,645,646,647,648,649,650,651,652,653,654,655],{"id":32,"depth":224,"text":33},{"id":53,"depth":224,"text":54},{"id":99,"depth":224,"text":100},{"id":159,"depth":224,"text":160},{"id":194,"depth":224,"text":195},{"id":297,"depth":224,"text":298},{"id":323,"depth":224,"text":324},{"id":367,"depth":224,"text":368},{"id":400,"depth":224,"text":401},{"id":445,"depth":224,"text":446},{"id":458,"depth":224,"text":459},{"id":595,"depth":224,"text":596},{"id":605,"depth":224,"text":606},"Context Architecture se aplica a un codebase que ya existe, reordenándolo de a poco, nunca armando uno nuevo desde cero. Lees el repo como alguien sin contexto, arreglas la documentación que miente y respaldas cada afirmación que el repo hace sobre sí mismo con un check que falla cuando esa afirmación deja de ser verdad.","Una guía práctica para reordenar un repositorio y dejarlo legible para personas y agentes de IA: léelo como alguien sin contexto, arregla los docs que mienten, pon AGENTS.md en las fronteras y respalda cada afirmación con un check. Una especificación de Sergio Azócar.","md","Guía",{},"\u002Fes\u002Fguide",{"title":5,"description":657},"es\u002Fguide","oqkdjm5yTBF-YLv8XovXhr9FecHc4WC8l4OAnjIJRf0",1781920627983]