Sobrescribir, no bifurcar

Cómo cambia un sitio Rustelo cualquier cosa sin editar el framework

Rustelo 4 min de lectura
En cuanto un sitio edita un fichero del framework, pasa a tener una bifurcación y pierde las actualizaciones seguras. Rustelo da a cada personalización un lugar fuera del framework: una capa local de sobrescritura, plugins en tiempo de compilación y sitios generados a partir de plantillas mantenidas.

Sobrescribir, no bifurcar

Todo framework llega al mismo momento. Un sitio necesita otro tema, una orden más, un componente que se comporte de forma un poco distinta, y el camino más corto es abrir el fichero del framework y cambiarlo. Funciona una vez. A partir de ahí el sitio tiene una bifurcación: cada actualización del framework hay que fusionarla a mano en un fichero que ya ha divergido, y la actualización que habría corregido un error es la que nadie aplica.

Rustelo trata «sin bifurcar el framework» como una invariante, no como un consejo, y da a cada tipo de personalización un lugar donde vivir fuera del framework.

Un sistema de capas de sobrescritura

Los valores por defecto de la configuración, las órdenes del justfile, los temas CSS y el estilo de los componentes se resuelven a través de cuatro capas, con precedencia estricta (ADR-003):

  1. Local: lo que decide este proyecto.
  2. Feature: valores aportados por una funcionalidad activada.
  3. Template: valores por defecto del tipo de proyecto.
  4. Framework: la base.

Gana la primera capa que aporta un valor. La resolución es determinista, así que para cualquier clave el valor ganador es previsible; y como la capa del framework nunca se edita, una actualización solo cambia los valores que nadie sobrescribió. No hay conflictos de fusión, porque no se fusionó nada.

Plugins compilados dentro

Algunas ampliaciones no son valores sino comportamiento: un tema, un menú, un conjunto de traducciones, una página. Esas pasan por dos traits, ResourceContributor y PageContributor (ADR-004). Un plugin es un crate compilado dentro del binario y registrado al arrancar. No hay un cargador de plugins en tiempo de ejecución que proteger o versionar; las interfaces se diseñaron para que pasar más adelante a plugins en tiempo de ejecución cambie cómo se registran, no cómo se escriben.

Sitios generados, no copiados

Un sitio nuevo no empieza como copia del sitio de otra persona. just site::new lo genera a partir de una plantilla mantenida, una instantánea saneada de un sitio de referencia vivo (ADR-007), aplicando por el camino lo que eliges: el nombre del proyecto, el dominio, el perfil de renderizado.

Un sitio thin va un paso más allá. No tiene código Rust propio: usa un binario de servidor compartido e independiente del contenido y aporta solo su configuración, sus plantillas, su contenido y su marca. Las plantillas se resuelven en cadena —framework, luego implementación, luego el sitio—, así que un sitio sobrescribe una sola plantilla poniendo su propia copia en su capa local, y todas las que no sobrescribe siguen las del proyecto original.

Lo que aporta la invariante

La personalización es visible: todo lo que un sitio cambió está en su propio árbol, y nada en el del framework. Las actualizaciones son seguras: lo que no se sobrescribió recibe el nuevo valor por defecto. Y el framework sigue siendo un único framework, que sirve a todos los sitios construidos sobre él.

Este sitio es un sitio thin.

· lecturas