Team DSTIIngeniería y sistemas de la escuela
En esta página
ResumenCuando cambió el requisitoCuatro idiomasConsistenciaNombrar la ediciónIdentidad de una misma cosamanager2Revisar es publicarLo que se conserva
DSTI TechBlog / Team DSTI
Team DSTIGobernanza · identidad · entrega

Las promesas detrás de las páginas: ingeniería de dsti.school, parte 2

Un texto extenso sobre cómo el sistema detrás de un sitio web estático se convirtió en una práctica de publicación industrializada: cómo los idiomas, los enlaces, las identidades, la edición y la publicación se convirtieron en promesas organizacionales que el patrimonio puede recordar, probar y mantener.

sistemas-de-informaciongobernanza-de-contenidolocalizaciondatos-enlazadosci-cdsitio-estatico

DSTI TechBlog · Team DSTI

Una nota sobre la versión y sobre la honestidad. Este artículo describe dsti.school tal como estaba en la versión V377, justo antes de V378, donde se ha publicado este artículo. El patrimonio congelado en la instantánea pública cuyas cifras aparecen en el panel de arriba es, en efecto, V377. Preparar esta página para su publicación no fue neutral: someterla a las propias reglas del patrimonio reveló supuestos que hubo que reconstruir antes de poder publicarla — apropiado, para un texto sobre lograr que un sistema mantenga sus promesas. En concreto:

  • Modelo de configuración regional — el build no podía representar una página que existía en inglés antes que sus traducciones. Se generalizó para que el francés, el español mexicano y el portugués brasileño sigan ahora una única regla de redacción deliberada, eliminando una división que trataba al francés y al español de forma distinta al portugués y dos excepciones de ruta codificadas de forma rígida. Esta es la primera página creada primero-en-inglés de esa manera, en lugar de «todas las configuraciones regionales a la vez». Y es más segura.
  • Control de coherencia y verificación del conteo de tarjetas — la propia verificación de integridad del blog afirmaba un catálogo congelado mediante conteos fijos; ahora estos se derivan del patrimonio.

Los cambios preservan el comportamiento — verificados página por página contra el build anterior — y quedan asegurados por siete nuevas pruebas de regresión y dos documentos de gobernanza actualizados.

La parte 1 contó la historia de la reconstrucción de dsti.school: el trabajo de campo que precedió al código, la elección de un sitio web estático y los controles que hicieron verificable una publicación. Esta segunda parte comienza donde terminó aquel relato.

Una vez que el nuevo sitio existió, la pregunta difícil fue más allá de construir una página: ¿cómo podía la organización mantener una promesa?

Una colegiatura mostrada en cuatro idiomas debe seguir siendo la misma colegiatura. Un profesor vinculado desde un artículo debe seguir siendo la misma persona que el profesor en la página de docentes. Un colega que cambia una fecha de admisión debe poder concentrarse en la fecha mientras la maquinaria de publicación hace su trabajo por debajo. Lo que aprueba un publicador debe ser exactamente lo que llega al patrimonio público. Y un ingeniero futuro debe poder descubrir por qué existen esas reglas a partir del propio paquete, con el razonamiento preservado más allá de mensajes antiguos e incidentes recordados a medias.

Esas son promesas organizacionales antes de ser requisitos técnicos. La ingeniería vino después.

Figura — la cadena ADIS
ADIS · LA DISCIPLINA El análisis antes que el diseño; el diseño antes que el código. Organizaciónnombra la necesidad el mandato Análisisel QUÉ + límite describir el qué, resistir el cómo Diseñoel CÓMO · plano convertir el qué en cómo Ingenieríaconstruir + verificar el código sigue al diseño El código es una consecuencia del diseño, no su motor — el orden nunca se invierte. La organización manda; la ingeniería responde: necesidad → qué → cómo → construido-y-probado.
La cadena ADIS: la organización nombra la necesidad, el análisis fija el qué y el límite, el diseño lo convierte en el cómo, la ingeniería construye y verifica.

Este es el orden que se enseña en Analysis & Design of Information Systems (ADIS) en DSTI School of Engineering. La organización plantea la necesidad. El análisis establece qué debe cumplirse y dónde está su límite. El diseño decide cómo lo sostendrá el sistema. La ingeniería construye y verifica el resultado. La disciplina más amplia es sencilla de enunciar: el código es una consecuencia del diseño, y el diseño es una consecuencia del mandato de la organización.

Esa secuencia es fácil de recitar y sorprendentemente difícil de mantener. El trabajo técnico genera su propia inercia. Una vez que un equipo puede construir algo, resulta tentador dejar que la tecnología disponible defina el problema. Un esquema de base de datos se convierte en el modelo de la organización porque ya existe. Un sistema de despliegue adquiere ceremonias porque su primera implementación resultó necesitarlas. Una herramienta de traducción empieza a decidir el vocabulario académico porque puede producir oraciones plausibles con rapidez.

ADIS nos pide viajar en la dirección contraria. ¿Qué debe seguir siendo verdad? ¿Quién tiene la autoridad para decidirlo? ¿Qué límite cruza el requisito? ¿Qué evidencia nos permitiría rechazar un resultado incorrecto? Solo después de resolver esas preguntas elegimos una representación o una herramienta.

El sitio web ahora sigue ese orden. Su ingeniería puede leerse a través de tres ideas recurrentes:

La promesa es la unidad de ingeniería.

01Cuando cambió el requisito

El primer requisito fue modesto: DSTI School of Engineering necesitaba un sitio web modernizado.

El método de trabajo inicial estuvo a la altura. Las páginas se construían mediante conversaciones con ChatGPT y se intercambiaban como archivos ZIP. Para un folleto ensamblado por una sola persona, eso era rápido y adecuado. El archivo contenía el resultado visible; la conversación contenía la mayor parte del razonamiento; la persona que había realizado el trabajo conectaba ambos.

La organización comenzó entonces a pedirle al sitio web que garantizara las relaciones detrás de lo que mostraba. Ese requisito más amplio exigía un método diferente.

¿Podía la misma información de admisión mantenerse coherente entre idiomas? ¿Podía entregarse un cambio a otro colega con su contexto ya preservado? ¿Podía rechazarse una publicación porque una afirmación oculta legible por máquina se había desviado aunque la página siguiera viéndose correcta? ¿Podíamos probar que los bytes aprobados en staging eran los bytes publicados después? ¿Podía un editor trabajar de forma segura mientras el despliegue seguía siendo responsabilidad del sistema de publicación?

La distinción es importante. Una carpeta de archivos puede contener una respuesta correcta. Una autoridad operativa también debe explicar por qué la respuesta es correcta, quién tiene derecho a cambiarla y qué cambio futuro la invalidaría. Una transcripción de chat preserva una discusión; el paquete necesita sus decisiones en una forma que personas y máquinas puedan consultar, probar e interpretar de manera consistente.

Por eso la memoria del proyecto se trasladó a un único repositorio gobernado que usa Git, un sistema de control de versiones distribuido. El control de versiones registra los cambios a un conjunto de archivos y el orden en que se aceptaron. Su valor aquí proviene de dar a la organización una historia común y un punto preciso desde el cual puede comenzar cada build; la verdad sigue dependiendo de las autoridades y los controles aplicados a esa historia.

En este paquete, Git se convirtió en la memoria del paquete autoritativa — uno de sus componentes son los Engineering Principles. Eso significa más que guardar el código fuente. Incluye las reglas, los esquemas, las autoridades de traducción, las descripciones de herramientas, las pruebas y los documentos de operación necesarios para entender y reproducir el sistema. El repositorio es un punto de partida compartido para personas, agentes y pipelines.

Esto se acerca a la idea de una única fuente de verdad, con una salvedad importante. El repositorio gobierna el paquete y la candidata que pretendemos construir. El patrimonio activo actual existe por derecho propio, y una instantánea de reversión registra el estado público anterior. La fuente, el paquete operativo y el predecesor activo tienen cada uno un propósito distinto; mantener esos propósitos separados eliminó una fuente de sobreingeniería anterior.

El modelo maduro es deliberadamente menos dramático:

  1. el paquete y sus reglas de operación se gobiernan en Git;
  2. el contenido mantenido y la proyección de publicación se gobiernan en Git;
  3. el patrimonio activo anterior se conserva de forma independiente como un límite operativo de reversión.

Esa separación mantiene útil la historia y permite que cada acción siga su autoridad real. Una corrección de contenido puede convertirse en un parche de la misma versión. Una nueva versión pública puede avanzar tanto la identidad como la fecha de publicación. Un despliegue captura el patrimonio activo actual antes de reemplazarlo; por eso el límite de reversión refleja lo que era genuinamente público en ese momento.

La lección más amplia va más allá de «usar Git»: una garantía necesita un lugar duradero donde vivir. Cada nueva promesa organizacional adquirió un límite declarado, una autoridad que podía recordarla y un control que podía negarse a romperla. El resto de la arquitectura se desprende de esa elección.

02La misma escuela, en cuatro idiomas

DSTI School of Engineering es una escuela francesa cuyos estudiantes y familias provienen de mucho más allá de Francia. Cada lector debería poder encontrarse con la escuela en un idioma pensado para él.

Por eso el patrimonio tiene cuatro configuraciones regionales gobernadas. Una configuración regional es más específica que el nombre de un idioma: combina el idioma con las convenciones regionales que influyen en el vocabulario, la puntuación y el uso esperado. Las cuatro variantes son el inglés británico como fuente, el francés estándar de Francia, el español mexicano y el portugués brasileño. El español mexicano atiende a un público latinoamericano mediante un estándar regional coherente; el portugués brasileño da a los lectores de habla portuguesa su propia edición natural. Estos estándares explícitos dan a los editores humanos y a los sistemas de traducción instrucciones más precisas que las etiquetas amplias «francés», «español» y «portugués».

Este trabajo es localización: preserva tanto el significado como la forma en que un lector espera que ese significado se exprese. Una oración fiel aún puede sentirse traducida, mientras que una oración natural puede cambiar sigilosamente un hecho. Ambas dimensiones importan.

Figura — una fuente, cuatro configuraciones regionales
IDIOMAS · §2 Una fuente, cuatro configuraciones regionales de primer orden. Inglés británicoen-GB · la fuente Français (FR)fr · francés estándar de Francia Español (MX)es-MX · América Latina Português (BR)pt-BR · Brasil hreflang recíprocos (+ x-default) · los slugs nunca se traducen automáticamente La sustancia del programa — nombres de cursos, módulos, etiquetas de modo de estudio —permanece en inglés canónico en cada configuración regional. en-GB se redacta; cada objetivo sigue consignas gobernadas, dos pasadas y revisión humana — nunca una traducción añadida.
Una fuente, cuatro configuraciones regionales de primer orden: fuente en-GB, fr, es-MX y pt-BR, enlazadas por hreflang recíprocos; la sustancia del programa permanece en inglés canónico.

De un único archivo generador a un sistema de autoridades

En junio, la gobernanza de traducción era un solo archivo de texto: translations_principles_generator.txt. Su título completo lo llamaba «DSTI translation & localisation principles — generator», y su instrucción inicial era literalmente un mensaje de contexto que podía pegarse en un chat nuevo. Era útil. Le decía al siguiente modelo de lenguaje que el inglés británico era la fuente, definía el francés y el español mexicano, exigía un pase fiel seguido de un pase de naturalidad, protegía el marcado y los nombres oficiales, y registraba el vocabulario recurrente.

También pertenecía a la forma en que el proyecto funcionaba en ese momento. El archivo explicaba qué archivo ZIP abrir primero, dónde debían ubicarse los resúmenes complementarios y qué columnas temporales debía usar un libro de Excel para evaluar y devolver traducciones. Las reglas de idioma perdurables y el procedimiento operativo temporal ocupaban el mismo documento. El portugués brasileño se sumaría después como una configuración regional de destino en igualdad.

Ese generador transfería el contexto de forma efectiva entre chats. Una autoridad organizacional completa exigía más: un operador futuro tenía que distinguir las reglas de idioma actuales, un procedimiento de libro ya retirado y la evidencia de un solo ejercicio de traducción a lo largo de 481 líneas. Por eso el siguiente diseño añadió una forma validada y una gobernanza igual para cada configuración regional.

El sistema actual separa esas responsabilidades a la vez que preserva el archivo original en la historia de Git. La jerarquía operativa activa es explícita:

  1. LANGUAGE_AUTHORITY.md y LANGUAGE_AUTHORITY.json declaran el inglés británico como la fuente normal, nombran las tres configuraciones regionales de destino y establecen qué autoridad prevalece cuando los archivos discrepan.
  2. locale-profiles.json da al francés de Francia, al español mexicano y al portugués brasileño los mismos campos legibles por máquina: código de idioma del documento, configuración regional de Open Graph, autoridad de rutas, interfaz de redacción y revisión humana obligatoria.
  3. El esquema común LOCALE_LANGUAGE_GUIDANCE.schema.json define lo que debe contener cada archivo de guía de configuración regional.
  4. FR_LANGUAGE_GUIDANCE.json, ESMX_LANGUAGE_GUIDANCE.json y PTBR_LANGUAGE_GUIDANCE.json llevan las decisiones de idioma reales para cada configuración regional.
  5. El mapa de páginas y configuraciones regionales registra qué página fuente mantenida corresponde con qué página traducida y qué ruta posee cada una.
  6. Los valores estables data-dsti-element-id y data-dsti-source-id conectan un elemento traducido con el elemento en inglés que traduce.

Los archivos de guía de configuración regional son autoridades deliberadamente estructuradas. Sus campos separan registro, formato, preservación, fuentes y terminología. Una entrada de terminología puede registrar el concepto en inglés, las opciones contextuales aceptadas, las formas desaconsejadas y la razón de la decisión. Todo lo que hay en el archivo es guía vigente, y cada configuración regional sigue un modelo uniforme.

Esto importa en la práctica. «Digital jobs», por ejemplo, es comprensible cuando se traduce literalmente, pero el resultado literal puede dar a entender trabajo realizado en línea. El significado buscado se refiere a las carreras en el sector tecnológico. Por eso la autoridad del español mexicano registra empleos en el sector tecnológico y alternativas contextuales. La autoridad del portugués brasileño prefiere profissões na área de tecnologia, empregos na área de tecnologia o carreiras em tecnologia, según si la oración se refiere a profesiones, vacantes o trayectorias profesionales. El hallazgo de esa sesión de traducción vive ahora como una decisión reutilizable en la autoridad.

La terminología científica se resuelve primero por concepto. El traductor parte del concepto en inglés, usa la relación entre idiomas de Wikipedia para descubrir el término establecido en el idioma de destino, verifica el uso profesional y registra la opción contextual. Los nombres oficiales conservan la prioridad: un programa, curso, unidad docente nombrada, producto, tecnología o token de máquina de DSTI permanece protegido.

Por eso el primer límite de diseño permanece claro. El relato humano de DSTI viaja: la ruta de admisión, la experiencia de los estudiantes internacionales, el entorno de la escuela y las explicaciones en torno a un programa. La sustancia académica conserva su identidad canónica en inglés: los nombres oficiales de programas, los nombres de cursos, las descripciones de cursos y las unidades docentes nombradas permanecen consistentes en cada configuración regional.

Esto puede parecer inusual al principio. Una página en portugués puede contener el título de un curso en inglés dentro de un portugués brasileño por lo demás natural. Es deliberado. El título identifica un objeto académico usado en horarios, registros y autoridades de programas. Traducirlo crearía una segunda etiqueta cuya relación con el curso oficial tendría que mantenerse indefinidamente. La explicación circundante pertenece al idioma del lector; la identidad académica pertenece a la autoridad del programa.

Lo que ahora implica traducir una página

El proceso comienza con un par fuente/destino mantenido y gobernado como una sola unidad editorial.

  1. Fijar la fuente y el alcance. El trabajo comienza a partir de un commit de Git limpio. La autoridad de página y configuración regional identifica la fuente en inglés británico y el destino en francés, español o portugués.
  2. Cargar la autoridad de la configuración regional de destino. El traductor lee la política común y la guía en JavaScript Object Notation (JSON) del destino: registro, forma de dirigirse al lector, presentación de números y moneda, formas protegidas, terminología recurrente y alternativas contextuales.
  3. Traducir con fidelidad. El primer pase preserva cada hecho, matiz y énfasis, resistiendo adiciones explicativas o interpretación editorial. Los programas, cursos y tecnologías oficiales permanecen sin cambios.
  4. Reescribir para lograr naturalidad. El segundo pase elimina los calcos, los falsos amigos, el orden de palabras del idioma fuente y la desviación de registro. El español mexicano usa y evita el vocabulario exclusivo de España; el portugués brasileño usa construcciones brasileñas naturales; el francés de Francia se mantiene moderno, neutral y sin afectación regional.
  5. Proteger la estructura mediante Dsti.ContentInventory. El texto legible por humanos puede encontrarse dentro de <span>, <strong> o enlaces, y el inventario lo expone al editor como contenido identificado, separado del HyperText Markup Language (HTML) circundante. Dsti.ContentInventory asigna el valor a su data-dsti-element-id estable y, para una traducción, al linaje de origen que porta data-dsti-source-id. El editor cambia el valor identificado mientras las etiquetas, los atributos, los identificadores y las rutas gobernadas permanecen intactos. La función del inventario es la identificación; la autoridad de idioma y los dos pases humanos gobiernan la traducción en sí. Los cambios estructurales y semánticos se hacen explícitamente en el HTML mantenido, mientras que el Markdown generado y los archivos de distribución sirven como superficies de revisión.
  6. Revisar lo que produce el build. El gemelo Markdown generado de la página agiliza una revisión de la prosa. Después se inspecciona el HTML donde importan los metadatos, los enlaces, el marcado anidado o el JavaScript Object Notation for Linked Data (JSON-LD). Una persona sigue siendo responsable del significado y de la naturalidad.
  7. Preparar el patrimonio. El build gobernado regenera todo y ejecuta el control de traducción del patrimonio sobre la candidata construida completa: la forma exacta apta para su publicación.

La página se maneja como un objeto ligado a su fuente en todo momento. Si la traducción al portugués de un párrafo falla, el informe identifica el data-dsti-element-id del portugués, el data-dsti-source-id del inglés y ambos valores. El editor puede volver directamente al elemento mantenido exacto que necesita corrección, evitando una búsqueda por la línea 417 de la salida minificada.

Lo que el control de traducción prueba realmente

El control de todo el patrimonio enumera cada grupo gobernado de página completa en el sitio web y los subdominios de material complementario, y luego evalúa cada par fuente/destino materializado. En una candidata reciente, eso significó 211 pares en 73 grupos. Se ejecuta dentro de prepare, porque solo la candidata construida contiene la forma completa que se entregaría.

El control verifica un conjunto deliberadamente reducido de invariantes deterministas:

Si una de esas verificaciones falla, la candidata queda descartada y, por lo tanto, sigue sin ser apta para su publicación. Una lista de trabajo en Markdown y un informe JSON legible por máquina permanecen fuera de la candidata. El operador corrige la fuente mantenida y ejecuta prepare de nuevo; la nueva preparación reemplaza el intento anterior y presenta una única candidata vigente.

El control califica la coherencia determinista. Los revisores humanos juzgan si una oración es idiomática, si resulta acogedor en su párrafo particular y si una explicación traducida conserva el énfasis de la fuente. La presentación de números y moneda también sigue siendo contextual: los formatos locales, los numerales escritos, las fechas y los rangos produjeron demasiados falsos positivos para una regla mecánica neutral respecto de la configuración regional. Los números críticos que pertenecen a un dominio gobernado —una fecha de admisión, una colegiatura o un total del plan de estudios— están protegidos por la autoridad y el control de ese dominio; la revisión lingüística sigue siendo responsable de su expresión en la prosa.

Esa división es más útil que una «puntuación de traducción» de propósito general. La máquina protege lo que puede afirmarse con exactitud. La autoridad de idioma orienta lo que depende del contexto. Una persona decide si el resultado es a la vez fiel y digno de leerse.

Las cuatro páginas también tienen que identificarse entre sí ante las máquinas. Cada una tiene su propio Uniform Resource Locator (URL), una dirección canónica que declara la URL pública preferida, y referencias recíprocas de idioma alternativo. Los motores de búsqueda suelen conocer esas relaciones alternativas a través de hreflang. El título de la página debe concordar con su título para compartir en redes sociales, expresado mediante el protocolo Open Graph. Sus datos estructurados deben dar a la página en portugués su identidad y su ruta en portugués.

Estas son declaraciones tanto operativas como editoriales. Un lector puede ver un portugués correcto mientras a un rastreador se le dice que la página está en inglés, o mientras el selector de idioma apunta de vuelta a un recurso en inglés. Por eso la coherencia lingüística tiene que incluir en conjunto el texto visible, los enlaces y los metadatos legibles por máquina.

Agregar una configuración regional extiende cada relación en la que participa su página: título, enlace alternativo, bloque de datos estructurados, redirección y referencia cruzada. Por eso cada configuración regional de destino entra en el mismo esquema, el mismo flujo de trabajo de pares de páginas y la misma revisión de dos pases. Todo el patrimonio se verifica en cada configuración regional disponible; la evidencia puede mostrar entonces que un defecto es específico de una configuración regional. El idioma se convierte en una dimensión del diagnóstico mientras que el defecto en sí sigue guiándose por la evidencia.

La autoridad es ahora la familia de configuraciones regionales, los archivos de idioma, el mapa de rutas y el linaje de origen actuando en conjunto. El límite sigue siendo la línea entre la explicación localizable y la sustancia académica canónica. El control determinista protege lo que las máquinas pueden saber; los dos pases humanos protegen lo que solo los lectores pueden juzgar.

El idioma muestra el método en un límite. El mismo método se vuelve más exigente cuando las relaciones abarcan todo el patrimonio.

03La consistencia es una propiedad del patrimonio

El sistema público es más grande que el sitio web principal. Incluye cuatro familias de material complementario —facts, information, Sophia y awareness—, cada una con sus propias rutas y variantes de idioma. En conjunto, la publicación gobernada contiene 742 archivos desplegables entre 284 páginas HTML, 285 bloques JSON-LD y 363 redirecciones gestionadas.

HTML describe la estructura de una página web. JSON-LD expresa entidades y relaciones en un grafo legible por máquina sin dejar de poder incrustarse en esa página. Las dos vistas pueden discrepar incluso cuando el navegador representa algo atractivo. El programa visible puede nombrar a un profesor mientras el JSON-LD nombra a otro. Una ruta traducida puede mostrar francés y aun así anunciar una dirección canónica en inglés. Esos defectos del sitio web pueden seguir siendo visualmente plausibles.

Los totales del patrimonio describen su escala. La coherencia proviene de que un build futuro se detenga cuando una de las relaciones registradas se rompe.

Figura — la superficie de consistencia
SUPERFICIE DE CONSISTENCIA · §3 Un idioma es una dimensión multiplicada a través de todo. en-GBfres-MXpt-BR main-website facts info Sophia awareness entregado ausente en esta configuración regional TOTALES DE TODO EL PATRIMONIO 742archivos desplegables 284 · 285páginas · bloques JSON-LD 363redirecciones gobernadas 211 / 73pares / grupos de traducción 11controles de build nombrados cada uno hace fallar el build, no un reporte. Cada celda es una promesa; una promesa rota hace fallar el build. «Un idioma más» nunca es una página más.
La superficie de consistencia: el sitio web y las familias de material complementario cruzados con cuatro configuraciones regionales, gobernados por controles de todo el patrimonio.

Un verificador de página y un verificador de patrimonio responden preguntas distintas. El verificador de página lee un documento, evalúa sus enlaces, metadatos y afirmaciones semánticas, y luego pasa al siguiente. Su método deliberadamente acotado es predecible: tomar una página, inspeccionar las referencias internas de DSTI que contiene, verificar su destino e idioma, registrar el resultado, continuar. Consume la autoridad de patrimonio suministrada y permanece dentro de la página actual; la construcción recursiva del grafo pertenece fuera de esta operación.

En la capa de fuente gobernada, el inventario registra 2,563 referencias internas visibles y 4,140 referencias internas en total cuando se incluyen las declaraciones canónicas, hreflang, Open Graph y JSON-LD. Esas cifras describen las relaciones que el sistema debe preservar; el conteo de ocurrencias del patrimonio construido que aparece en el panel superior describe cada lugar donde esas relaciones se materializan.

La vista a nivel de patrimonio pregunta entonces si esos resultados de página independientes concuerdan entre sí. Los enlaces internos deben resolverse al destino y la configuración regional previstos. Los enlaces relativos se usan dentro de un mismo host, mientras que los enlaces entre el sitio web y un material complementario usan direcciones completas porque el límite del host es significativo. Las referencias de medios deben usar el host de medios gobernado, salvo los datos incrustados de forma deliberada. Las rutas canónicas y alternativas deben concordar. Los datos estructurados de una página traducida deben identificar esa página traducida en su propia configuración regional. El contenido de las tarjetas de curso debe permanecer en inglés canónico. Los títulos de página y sus gemelos de Open Graph y de redes sociales deben seguir siendo un único título. Los sitemaps y llms.txt —el índice conciso del patrimonio destinado a los grandes modelos de lenguaje (LLM)— deben llevar la fecha de publicación sellada, y los archivos de idioma del material complementario deben referenciar a todos sus hermanos gobernados.

El verificador combina la autoridad de configuración regional con el descubrimiento independiente de las páginas que existen realmente. Si una página mantenida está ausente de la autoridad, el descubrimiento hace visible la discrepancia para que la autoridad pueda actualizarse. Este emparejamiento demuestra la coherencia tanto del patrimonio descubierto completo como del conjunto registrado.

La distinción entre reglas locales y globales importa. «Este enlace se resuelve» es local a la página. «Este enlace se resuelve al idioma correcto dondequiera que ese destino tenga una edición localizada» requiere conocer la autoridad del patrimonio. «Esta fuente de medios usa el host correcto» es local. «Cada identidad pública de medios se representa de forma coherente en los metadatos de página y en los datos estructurados» cruza documentos. Un buen control declara qué clase de afirmación hace.

El control de horas de programa ofrece un ejemplo numérico del mismo principio. La MSc in Data Analytics with AI mostraba 835 horas como su volumen principal, mientras que su propia estructura de componentes sumaba 725 horas. Las cuatro configuraciones regionales repetían 835, de modo que una comparación entre configuraciones regionales por sí sola veía una concordancia perfecta. Las páginas estaban sistemáticamente equivocadas; el total visible ahora se corrige a 725 horas en cada configuración regional.

El control de horas de programa resultante es, por tanto, tanto intrapágina como entre configuraciones regionales. Deriva su alcance del linaje estable de contenido y de las formas encontradas en las páginas, y reconoce que los programas expresan el volumen de maneras distintas. Las páginas de MSc y Executive comparan una cifra principal con su total docente declarado; la Bachelor of Science (BSc) verifica el enunciado teaching + support = total de cada año, manteniendo su cifra principal de European Credit Transfer and Accumulation System (ECTS) fuera de una regla de horas. Esto es lo que añade un invariante de dominio: una declaración explícita de qué números deben concordar y por qué.

La etapa de preparación del paquete agrupa estas preocupaciones en controles explícitos, cada uno capaz de reportar la relación que protege. Entre ellos están:

CSS gobierna la presentación: la tipografía, el espaciado, el diseño adaptable y el comportamiento que convierte el mismo HTML en una interfaz para laptop o teléfono. Su optimización se acepta cuando el paquete demuestra que la proyección optimizada sigue siendo equivalente a la fuente gobernada dentro del contrato definido; la finalización de un minifier —una herramienta que elimina caracteres innecesarios para reducir el tamaño del archivo— es solo el paso de transformación.

Estos controles responden a una pregunta distinta de la de los validadores de documentos descritos en la parte 1. La conformidad de HTML establece que un documento es sintácticamente válido. Los controles más nuevos operan sobre el patrimonio como un conjunto de documentos relacionados, estableciendo que un material complementario en portugués enlaza con la guía en portugués y que la misma fecha de admisión aparece en todos los lugares donde debería.

El verificador clasifica cada fallo según la autoridad necesaria para resolverlo. Algunos revelan contenido faltante. Otros revelan una autoridad incompleta. Un curso puede tener una colisión histórica de códigos cuya resolución requiere una decisión académica; una edición mecánica sería insuficiente. Un reporte preciso pone cada caso ante la autoridad correcta.

Por eso el sistema puede ser coherente y aun así necesitar lectores. Los controles demuestran enlaces, identidades, fechas y relaciones de idioma declaradas. Los lectores humanos evalúan el tono, el énfasis y la calidad pedagógica. La consistencia mecánica proporciona el piso sobre el cual puede sostenerse la calidad editorial.

04Una edición debe nombrar lo que cambia

Una vez que varias personas y agentes pueden editar el patrimonio, un modelo de contenido duradero debe identificar directamente el valor buscado. «Abre el archivo y encuentra el texto» ata a un editor al marcado, fomenta cambios accidentales alrededor del buscado y hace difícil razonar sobre el trabajo concurrente.

La publicación web tradicional a menudo oculta esta complejidad tras un Content Management System (CMS). Un CMS como WordPress protege a un editor del HTML en bruto mediante campos, vistas previas y controles de publicación. DSTI conservó su arquitectura estática y atendió la misma necesidad humana mediante una superficie comprensible para cambiar fechas, etiquetas y registros mientras la estructura interna de la página permanece protegida.

El resultado es una superficie de contenido identificado. Cada elemento editable tiene una identidad gobernada estable, y una edición nombra esa identidad directamente. El elemento fuente en inglés porta su propia identidad; los elementos traducidos apuntan de vuelta a esa identidad de origen a través de su linaje. Un párrafo en francés puede moverse dentro de una página sin dejar de ser el mismo objeto editorial.

Las fechas de admisión, los registros de socios, los medios, las redirecciones y las historias de estudiantes tienen cada uno una operación gobernada con sus propias entradas y precondiciones. Los cambios más grandes se organizan como paquetes de trabajo en orden de dependencia antes de comenzar la edición. La forma legible por máquina es un directed acyclic graph (DAG): un conjunto de tareas conectadas por dependencias unidireccionales. Su estructura acíclica da a cada paso de construcción un predecesor resoluble, mientras que el grafo muestra qué puede avanzar en paralelo y qué autoridad debe resolverse primero.

Figura — ContentInventory como columna vertebral
DSTI.CONTENTINVENTORY · §4 La hoja de cálculo que se convirtió en la columna vertebral. con forma de Excelhoja de cálculo Dsti.ContentInventoryinventario anclado por id gobernadoprimitivas controlesfallo cerrado Primitivas: admissions · partner-directory · media · redirects · student-videos · translation. Cada nodo de texto editable corresponde a un id estable;los cambios de estructura, de enlaces y de semántica siguen siendo trabajo de fuente explícito. La hoja de cálculo familiar se convirtió en una columna vertebral establede direccionamiento de contenido sin convertirse en una segunda fuente de verdad.
ContentInventory: una superficie de edición con forma de hoja de cálculo se convirtió en un inventario anclado por id que alimenta operaciones de contenido gobernadas.

Dsti.ContentInventory es la columna vertebral de esa organización. Comenzó como un reemplazo con forma de Microsoft Excel para la edición rápida en WordPress y se convirtió en el mapa entre el contenido legible por humanos y los elementos estables de la página. La hoja de cálculo sigue siendo útil precisamente porque es familiar. La ingeniería reside en lo que ahora la rodea.

Una sesión de edición está ligada a un estado limpio de Git, un esquema —una definición legible por máquina de la estructura permitida—, un editor y un alcance explícito. El alcance exclusivo impide que dos sesiones reclamen en silencio el mismo contenido. Los gemelos Markdown generados proporcionan una superficie de lectura en texto plano, mientras que el HTML mantenido sigue siendo la fuente para los cambios estructurales y semánticos. La preparación mantiene el libro acoplado a las páginas al verificar que el libro generado sigue siendo sustancialmente equivalente al canónico gobernado.

Esta distinción evita un fallo conocido. Si un archivo generado se edita a mano, el cambio puede parecer correcto hasta que el siguiente build lo regenera desde la fuente y borra el trabajo. Una operación gobernada cambia la fuente mantenida y luego deja que el build produzca la distribución, los gemelos Markdown de la página y la evidencia del inventario. La salida del build sirve como superficie de inspección; la fuente mantenida sigue siendo la superficie de edición.

La herramienta misma tuvo que madurar con el modelo de contenido. La parte 1 describió un binario .NET 8 versionado. .NET es el marco de software multiplataforma de Microsoft; la herramienta ContentInventory actual se construye a partir de fuente gobernada con el software development kit (SDK) de .NET 10, de modo que el repositorio lleva la fuente en lugar de un binario compilado. La reconstrucción desde la fuente se acopló con la corrección de un defecto de identificación en portugués brasileño: los elementos recién identificados se habían acuñado con pt.br. mientras que el linaje gobernado es pt.. El build de fuente actual produce de forma consistente la forma gobernada pt..

Este es un ejemplo útil porque la gobernanza también se extiende a las herramientas detrás del sitio web visible. Una herramienta que identifica contenido puede crear desviaciones con la misma certeza que un editor. Una vez que se entendió eso, la herramienta entró en el mismo modelo de autoridad y control que las páginas a las que sirve.

La disciplina de edición incluye trabajo directo en HTML para cambios genuinamente estructurales: agregar una relación en JSON-LD, separar a los profesores principales de los profesores de apoyo en una tarjeta de curso o introducir un control accesible. Esos cambios pertenecen a la fuente mantenida y requieren un ingeniero. La superficie identificada hace explícito el límite y reserva la edición con forma de hoja de cálculo para el contenido que puede representar con seguridad.

Observar el resultado dentro de un límite de evidencia definido

La presentación visual entra al final de una operación de contenido, contra los bytes aptos para su publicación. Check User Interface (Check UI) representa las páginas modificadas mediante browser automation usando Playwright. La automatización de navegador impulsa un motor de renderizado real en tamaños de viewport predefinidos, lo que permite al paquete inspeccionar lo que un lector recibiría en una laptop compacta, un monitor más grande, una tableta o un teléfono.

Las páginas modificadas se representan sobre nueve viewports críticos de forma predeterminada, o los veinte viewports gobernados en una revisión completa. Una solicitud de una sola página incluye esa página en cada configuración regional disponible. Las verificaciones cubren lo que puede establecerse de forma determinista: desbordamiento, contenido escapado o recortado, identificadores duplicados, nombres de controles accesibles faltantes, contraste de texto sobre fondos determinables, navegación rota, recursos faltantes y errores de ejecución.

La evidencia es útil precisamente porque su alcance está declarado. Check UI aporta evidencia determinista del navegador para los defectos enumerados; una auditoría completa de accesibilidad y una revisión visual humana cubren la composición, la legibilidad cómoda y si una ilustración comunica la idea que pretende. Un detector genérico de superposiciones también puede encontrarse con movimiento legítimo, como un elemento de menú dentro de la página que entra o sale del viewport mientras el lector se desplaza. El sistema aísla esa clase defendible de falsos positivos mientras sigue reportando otras superposiciones.

Una ejecución local informa cuando no hay disponible una línea base activa confiable, manteniendo honesta su evidencia. La revisión local puede apuntar a todo el patrimonio o a un conjunto elegido de páginas; el control de integración continua gobernado aplica el alcance de páginas modificadas de la candidata antes del staging. La evidencia visual informa la decisión humana, que sigue siendo el juicio final sobre la presentación.

El principio es el mismo en todo momento: el sistema declara exactamente lo que puede demostrar y asigna el juicio restante a su autoridad correspondiente.

05La misma cosa debe seguir siendo la misma cosa

Un sitio web escrito para personas puede tolerar la repetición. El mismo título de curso puede aparecer en cuatro páginas de programa y en varias tarjetas de docentes. Un grafo legible por máquina debe resolver si esas ocurrencias describen la misma cosa.

La idea relevante proviene de la Web semántica, presentada con más profundidad en el artículo de DSTI Web semántica y datos enlazados: hacer que la Web sea legible por máquinas: los recursos web pueden expresar documentos, entidades identificadas y relaciones tipadas. Un grafo de conocimiento representa esas entidades como nodos y sus relaciones como aristas. En este patrimonio, gran parte de ese grafo se publica como JSON-LD dentro de páginas estáticas, de modo que no es necesaria una base de datos de grafos aparte.

El patrimonio entregado contiene actualmente 11,128 objetos JSON-LD tipados que portan 11,162 aserciones de tipo y 1,849 identificadores únicos. Las relaciones detrás de esos números portan el significado. Un programa contiene instancias de curso. Una instancia de curso identifica a un instructor. Una página de docentes expresa la relación inversa desde una persona hacia las instancias que enseña o apoya. Por lo tanto, las vistas de programa y de docentes son dos direcciones a través de un mismo grafo.

Figura — el grafo de conocimiento
GRAFO DE CONOCIMIENTO · §5 Un identificador por cosa, referenciado en todas partes. IDENTIFICAR 785ocurrencias consolidar 126identidades RELACIONAR — ARISTAS TIPADAS Person · #prof-* CourseInstance instructor @reverse.instructor página de programa → instructor página de docentes → @reverse.instructor INTERPRETAR — UN LÍMITE, DOS VALIDADORES Una referencia { "@id": … } desnuda se lee de dos maneras: validador de patrimonio → referencia válida a un nodo definido en otra parte del grafo; validador de página única → no puede inferir el tipo del nodo remoto. El límite declarado explica la diferencia. El patrimonio es un grafo que una máquina puede resolver: los mismos docentes, cursos y programas que el sitio describe, expresados como identidades y relaciones tipadas.
El grafo de conocimiento: las ocurrencias de curso ligadas a rutas se reducen a invariantes gobernados, mientras que los enlaces instructor tipados conectan las vistas de programa y de docentes.

La distinción entre un curso y una instancia de curso es útil. «Mathematics for Data Science» puede ser una sola identidad de curso académico y aparecer a la vez en varios programas. Cada ocurrencia en un programa es una instancia de curso porque pertenece a un contexto educativo particular. Esa instancia puede enlazar con el mismo curso gobernado y con los profesores que lo imparten. El modelo preserva tanto la mismidad como el contexto.

La identidad de curso expuso la dificultad con la mayor claridad. El patrimonio tuvo en su momento 785 ocurrencias de curso ligadas a rutas. Como sus identificadores incluían la ruta donde aparecían, el mismo curso podía parecer varios cursos distintos ante una máquina. Una migración gobernada reconcilió esas ocurrencias en 126 identidades semánticas de curso, registradas mediante 197 entradas de autoridad. La migración hizo que la identidad de curso fuera independiente de la ruta.

Esto requirió más que coincidir cadenas. Dos etiquetas pueden nombrar el mismo curso incluso cuando difieren la puntuación o un código de curso antiguo. Dos cursos pueden llevar etiquetas similares y aun así ser académicamente distintos. La Dirección de Estudios puede asignar deliberadamente códigos diferentes a lo largo de las historias de los programas. Algunos códigos antiguos estaban duplicados entre cursos claramente diferentes y hubo que corregirlos en la fuente. Una autoridad de migración aprobada resolvió esos casos mediante el significado académico y también la evidencia de cadenas.

Los identificadores se expresan como identificadores web. Un Internationalized Resource Identifier (IRI) extiende la idea de un Uniform Resource Identifier (URI) a conjuntos de caracteres internacionales y puede identificar una entidad con independencia de si es una página convencional. En la práctica, DSTI usa identificadores https://dsti.school/... estables con fragmentos para cursos, personas e instancias. Cada configuración regional usa un mismo @id de curso compartido para el mismo curso académico, mientras que sus instancias de curso locales conservan su contexto de programa e idioma.

Este punto importa porque un localizador y una identidad tienen funciones distintas. data-dsti-element-id localiza un elemento de contenido gobernado en la fuente mantenida. data-dsti-source-id registra su linaje desde la fuente en inglés. Un @id de JSON-LD identifica la entidad académica descrita por ese contenido. Mantener esas funciones distintas preserva el significado de los datos.

El mismo trabajo incorporó las identidades del personal docente al DSTI TechBlog. Las firmas de artículos que pueden reconciliarse mediante la autoridad de docentes ahora reutilizan los mismos identificadores de docentes, reemplazando los anteriores fragmentos Person locales a la página. Los colaboradores externos conservan identidades separadas porque el grafo de docentes gobierna a los miembros del personal docente de DSTI.

La relación profesor-curso requería una arista inversa válida en el vocabulario. Schema.org proporciona instructor en CourseInstance; su vocabulario no tiene una propiedad general Person.teaches. La sintaxis @reverse de JSON-LD expresa el inverso desde la página de docentes. Allí, @reverse.instructor conecta la Person con las instancias de curso tipadas que enseña o apoya. Por lo tanto, las vistas directa e inversa concuerdan mediante una única propiedad válida de Schema.org.

El grafo reporta su precisión actual. Dos identificadores de docentes aún llevan variantes aceptadas de nombre visible, y un pequeño conjunto de estructuras de artículos tipadas como cursos necesita un modelo semántico más limpio. La autoridad hace esas aristas suficientemente visibles como para mejorarlas mediante evidencia.

Por qué dos validadores pueden discrepar

El World Wide Web Consortium (W3C) desarrolla muchos de los estándares sobre los que se construye la Web. Schema.org proporciona un vocabulario ampliamente usado para datos estructurados. Aun así, un validador de datos enlazados y un validador de página única orientado a la búsqueda pueden mirar límites distintos.

Un validador de datos enlazados puede aceptar un @id desnudo como una referencia a un nodo definido en otra parte del grafo. Un validador que inspecciona una página de forma aislada puede ver solo un objeto sin tipo porque su límite termina en esa página. El marcado público ahora proporciona el tipo que necesita ese límite de página única, mientras que el control de identidad interno distingue una referencia tipada de una definición duplicada.

La pregunta de diseño viene primero: ¿es el nodo una nueva definición, una referencia a una identidad existente o una instancia local de un curso compartido? Una vez resuelto el límite, cada validador puede hacer cumplir la parte que es capaz de ver; un resultado en verde confirma entonces el modelo ya elegido por la autoridad.

Por lo tanto, el grafo sigue el mismo patrón de tres partes que el resto del sistema. La autoridad registra identidades y equivalencias aprobadas. El límite distingue entidades, ocurrencias y elementos fuente. Los controles verifican la unicidad, la identidad entre configuraciones regionales, la simetría profesor-curso y la validez de Schema.org.

La autoridad proporciona el diseño. Cada validador hace cumplir sus consecuencias en un límite distinto.

06La maquinaria debe retirarse ante el editor

El repositorio es esencial para el sistema, mientras que la persona que edita contenido debería experimentar una operación de contenido clara. Esa división dio forma a manager2.

Los editores, los publicadores y los administradores de plataforma reciben un rol y una superficie de comandos gobernada. Una primitiva es una operación acotada con entradas, precondiciones, efectos y evidencia declarados: preparar una candidata, refrescar un directorio, publicar medios, tomar una instantánea activa, restaurarla o desplegar. La creación de ramas, el ensamblado de la candidata, el staging y la publicación siguen presentes como mecanismos detrás de esas operaciones, gestionados por el propio paquete.

Figura — manager2 y los puertos
MANAGER2 · §6 Primitivas que se manejan; límites que se pueden probar. PLANO DE CONTROL — DENEGAR POR DEFECTO 18 contenido-local · se ejecutan en una sesión local prepare update-content admissions partner-directory check-ui + 13 más 10 solo-automatización · rechazadas localmente → CI deploy staging-publish staging-review restore-live ✕ rechazada en una sesión local provision — break-glass de administrador auditado (sin tarea CI) El control es un rol de ejecución de CI, atestiguado por contexto inyectado — no una variable de entorno, no el privilegio de una persona. El privilegio SSO humano nunca se convierte en CI de rutina; el break-glass poco frecuente permanece explícito y auditado. CAPA DE DATOS — PUERTOS Y ADAPTADORES operativocode PUERTO un registro de agenteel directorio de socios DRIVERHubSpot (hoy) futurodriver Principio 4: abstraer en torno al concepto de dominio — el patrimonio posee el contrato; el proveedor es el driver de hoy. manager2 publica 28 primitivas gobernadas; los dos límites de arriba son lo que hace «ninguna acción, y ninguna fuente de datos, un rehén» — demostrable.
manager2: operaciones de contenido-local y de solo-automatización separadas en el plano de control; los puertos de dominio separan la lógica del patrimonio de los proveedores de datos de hoy.

La superficie de comandos contiene 28 primitivas gobernadas. Dieciocho están disponibles para el trabajo de contenido local; diez se ejecutan exclusivamente en automatización. El despacho local es denegado por defecto: una identidad de pipeline atestiguada suministra el contexto de ejecución para la promoción de rutina, mientras que un rol humano Single Sign-On (SSO) sigue siendo una sesión humana independientemente de sus privilegios. El Single sign-on permite que una sola identidad autenticada alcance varios sistemas; la verificación separada del contexto de ejecución establece si quien llama es la automatización de publicación.

El aprovisionamiento poco frecuente del patrimonio tiene su propia ruta deliberadamente explícita. Como arranque administrativo ocasional, usa una operación de acceso de emergencia (break-glass) de Administrador de Plataforma auditada. La entrega de contenido de rutina permanece en su pipeline, mientras que el aprovisionamiento poco frecuente permanece visiblemente excepcional.

El descriptor legible por máquina da a los agentes la misma vista de la superficie de comandos: argumentos, precondiciones, efectos, contexto de ejecución y recibos. Se asemeja a la forma del Model Context Protocol (MCP) usada para describir herramientas a los clientes de modelos de lenguaje, porque esa estructura es eficiente para la interacción con agentes. Sigue siendo un manifiesto descriptivo; los comandos gobernados conservan toda la autoridad de ejecución.

Esa separación importa. Una prueba de desviación compara el manifiesto descriptivo con el registro activo, asegurando que cada primitiva nueva esté documentada y que cada primitiva retirada desaparezca de la superficie anunciada. El esquema también exige que cada primitiva declare si es local-content o automation-only.

El mismo desacoplamiento aparece por debajo de la superficie de comandos. Una Application Programming Interface (API) define cómo un software le pide a otro sistema datos o acciones. Es tentador para el código operativo hablar directamente en los campos de un proveedor: obtener un objeto de HubSpot, leer sus propiedades, representarlas. Eso es rápido, pero deja que el modelo de datos del proveedor se convierta en el modelo de la escuela.

En cambio, el paquete usa la lógica del patrón de diseño adaptador, a menudo descrito aquí como puertos y adaptadores. El patrimonio pide un registro de agente o un directorio de socios en el lenguaje de dominio de la escuela. Esa solicitud es el puerto. HubSpot es hoy el driver o adaptador que está detrás. Las pruebas pueden reemplazar el driver por una fuente de registros escrita a mano y representar el mismo contenido de socios de forma independiente de una conexión activa con HubSpot.

Esto cuesta más código que llamar al proveedor directamente. A cambio, la escuela define sus datos de socios a través del puerto mientras que el proveedor de almacenamiento actual sigue siendo un driver reemplazable.

La misma regla se aplica al control de versiones. Amazon Web Services (AWS) CodeCommit es canónico porque la organización lo eligió como la autoridad de Git actual. GitHub es su proyección de solo lectura para la visibilidad y la colaboración, preservando una única autoridad de despliegue. También proporciona una superficie de seguimiento de incidencias mediante la cual lectores y colaboradores pueden enviar reportes de errores y solicitudes de cambio, complementando el rol canónico de CodeCommit. Un futuro cambio de proveedor requeriría un nuevo driver y una nueva ruta operativa, mientras que la definición de una versión permanece estable.

La instantánea congelada del sistema público tiene un propósito distinto del de esa proyección mantenida. La proyección pertenece al proceso continuo de publicación. La instantánea es una exhibición archivada y deliberadamente inerte de un punto de publicación: su historia fija y su propósito de educación pública preservan el paquete continuo como la única autoridad operativa.

El primer pipeline falló al convertir cada prueba interna en una ceremonia del operador. Recolectaba recibos, hashes y vinculaciones más rápido de lo que una persona podía entender qué decisión protegía cada uno. Los mecanismos de seguridad habían comenzado a oscurecer el modelo operativo.

La corrección colocó cada prueba donde corresponde. Una instantánea registra el patrimonio activo anterior. La preparación reemplaza la candidata anterior y presenta un intento vigente. La última preparación exitosa es la candidata apta para su publicación. Un despliegue exitoso limpia el material temporal propio y avanza las autoridades de Git. Un despliegue fallido restaura el predecesor capturado y deja esa instantánea disponible para una reversión solicitada por el operador.

Un repositorio es canónico. El trabajo local es solo de contenido. La automatización es dueña de las escrituras en el patrimonio público. Git permanece en todas partes bajo la superficie, mientras que el editor trabaja a través de la operación de contenido.

La buena gobernanza se mide por los fallos importantes que el sistema puede evitar mientras el operador permanece concentrado en la decisión en cuestión.

07La revisión debe significar publicación

La promesa final es la más concreta: la edición aprobada es la edición publicada.

Para entender el mecanismo, ayuda desglosar la integración continua y entrega continua (CI/CD). La integración continua significa que los cambios se integran y verifican mediante un proceso automatizado compartido, dando a la organización evidencia más allá de la máquina de un solo contribuyente. La entrega continua significa que una candidata validada puede avanzar por un camino repetible hacia la publicación. Aquí, «continua» describe la disposición y la repetibilidad; la publicación final sigue siendo una decisión humana.

Por lo tanto, la edición local y la publicación pública son ciclos de vida separados.

  1. Un editor cambia la fuente mantenida en una rama de contenido.
  2. La preparación gobernada reconstruye todo el patrimonio y ejecuta sus controles de contenido, semánticos y estructurales.
  3. El editor revisa el conjunto de configuraciones regionales afectado, incluidas las verificaciones visuales que se elijan.
  4. La rama se envía al repositorio canónico (AWS CodeCommit).
  5. AWS CodePipeline ejecuta su verificación previa hermética en AWS CodeBuild —resolviendo la cadena de herramientas y los paquetes gobernados desde AWS CodeArtifact—, reconstruye el patrimonio y luego ejecuta las pruebas dependientes de la candidata y del navegador antes de publicar en un patrimonio de staging privado.
  6. El publicador revisa esa edición en staging y otorga la única aprobación humana de puesta en marcha.
  7. El pipeline de despliegue (AWS CodePipeline) repite ambas fases de prueba de AWS CodeBuild alrededor de su reconstrucción y verifica la candidata aprobada antes de tocar el patrimonio público, y luego avanza la versión canónica y su proyección de solo lectura en GitHub.
Figura — el proceso CI/CD
PROCESO CI/CD · §6–§7 Una autoridad, dos ciclos de vida gobernados. LOCAL — SOLO CONTENIDO (editor + agente) editar local_website — build · validate · check-ui manager2 prepare local_website no tiene verbo prepare — prepare es una primitiva de manager2. empujar la rama `content/<actor>` → CI escribe el patrimonio BUILD DE STAGING CI — AUTOMATIZACIÓN (controlada por frescura) control de frescura ci-precheck snapshot-live prepare ci-postcheck staging-review (controlada por conflicto) registrar + avanzarstaging · compendio «puesto en stagingpara revisión» Las fases verdes particionan la superficie de pruebas registrada completa: antes y después del ensamblaje de la candidata. APROBACIÓN DEL PUBLICADOR — la única decisión humana PIPELINE DE PUESTA EN LÍNEA — AUTOMATIZACIÓN (sin interfaz, tras la aprobación) authority.check ci-precheck snapshot-live prepare ci-postcheck verify-staged-digest staging-publish verify-deploy-point deploy publicación + etiquetaespejo GitHub Ambos pipelines ejecutan cada prueba registrada en la fase más temprana donde existen sus entradas reales. El staging sigue siendo obligatorio; las verificaciones de compendio y de punto de despliegue vinculan la publicación con la candidata revisada. Los pasos verdes son fases de verificación o guardas de publicación; cada uno precede a la mutación que gobierna. Una autoridad; Git está presente en todo momento pero se retira ante los editores — la aprobación del publicador es el único control humano.
El proceso CI/CD: el trabajo de contenido local se convierte en una candidata en staging; la aprobación del publicador inicia un pipeline de puesta en línea sin interfaz, protegido por verificaciones de contenido en staging y de punto de despliegue.

El staging es el límite de revisión. La candidata allí tiene un compendio de contenido: un valor calculado a partir de sus bytes mediante una función de hash criptográfica. Un buen hash hace que los cambios accidentales o deliberados produzcan, de forma abrumadoramente probable, un compendio distinto. Por lo tanto, comparar compendios es una forma compacta de establecer que dos patrimonios ensamblados contienen el mismo contenido revisado.

El pipeline de puesta en marcha establece evidencia fresca para el build anterior. Reconstruye bajo el entorno de ejecución gobernado, compara el nuevo compendio de la candidata con la edición en staging, vuelve a publicar los bytes revisados en staging, verifica el punto de despliegue, captura el límite de reversión y solo entonces aplica el patrimonio activo.

La arquitectura estática ayuda. El patrimonio público es un conjunto estable de archivos versionados alojados en almacenamiento de objetos y distribuidos mediante una red de distribución de contenidos (CDN); por lo tanto, la revisión y la publicación operan sobre candidatas de archivos inmutables. El despliegue puede capturar la versión activa actual, aplicar el nuevo conjunto y restaurar el conjunto anterior si la transacción falla.

El límite de infraestructura acepta una carga exitosa del proveedor. La prueba más fuerte corresponde a una etapa anterior, donde la candidata ensamblada se compara con la revisada. Una relectura objeto por objeto anterior añadía peso operativo aunque aportaba poca seguridad adicional, de modo que el diseño actual mantiene la evidencia en el límite donde es más fuerte.

Staging repetible dentro de un límite de concurrencia explícito

La revisión es iterativa, así que el staging debe ser repetible. Un editor puede llevar a staging, descubrir un defecto, corregirlo y llevar a staging de nuevo dentro de la misma versión pública prevista.

Eso crea una condición de carrera sutil. La rama de staging avanza, pero una aprobación más antigua puede permanecer visible el tiempo suficiente para ejecutarse. El despliegue actual realiza una autoverificación antes del checkout y admite solo una edición que coincide con el estado actual en staging. Una aprobación obsoleta produce un mensaje claro de sustitución en lugar de un fallo de Git de bajo nivel.

La regla operativa restante es estrecha y explícita: aprobar la puesta en marcha después de que el build de staging actual haya finalizado. La autoverificación evita el conocido fallo de edición obsoleta, mientras que esta regla de secuenciación cubre el pequeño intervalo antes de que el estado en staging se asiente. Este es un buen ejemplo de lenguaje de ingeniería honesto: una matización precisa fortalece una garantía al definir su límite real.

El entorno de ejecución es parte de la candidata

La repetibilidad también depende de las herramientas que ensamblan los archivos. La misma fuente se vuelve repetible cuando se combina con el mismo intérprete gobernado, el mismo motor de navegador y el mismo generador de contenido.

El entorno de ejecución del operador en Python es gobernado y está bloqueado por hash. Las verificaciones de navegador usan su propio entorno de Playwright. La validación de HTML usa un entorno de ejecución de Java gobernado. ContentInventory usa la cadena de herramientas gobernada de .NET. macOS, Linux y Windows comparten la ruta de edición de contenido. El build y el despliegue se ejecutan en los entornos en los que se ha aceptado la cadena de herramientas completa; Windows permanece dentro de su alcance probado de edición de contenido.

Este es un límite de aceptación basado en evidencia para Windows. Puede aprovisionar las herramientas de medios a nivel de usuario que necesita —FFmpeg, ImageMagick y las herramientas del AV1 Image File Format (AVIF) mediante el gestor de paquetes Scoop— y puede ejecutar los comandos de edición soportados. Los entornos de build y de publicación siguen siendo aquellos en los que se ha probado la cadena de herramientas completa. La evidencia guiará cualquier expansión futura de ese límite.

Lo que revela el número de pruebas

El registro de pruebas contiene 162 módulos de prueba registrados, divididos por el momento en el que existen sus entradas requeridas. Un módulo agrupa casos de prueba relacionados, de modo que los conteos de módulos y de pruebas son distintos: la verificación completa ejecuta 1,292 casos de prueba en la verificación previa y 283 en la verificación posterior.

La primera fase, ci-precheck, ejecuta 136 módulos antes de prepare. Estas pruebas son herméticas: las entradas controladas y los efectos inyectados las hacen independientes de un proveedor activo, un navegador o un sitio web ya ensamblado. Pueden exponer un defecto antes de que comience el costoso build.

La segunda fase, ci-postcheck, ejecuta los 26 módulos restantes después de que prepare haya creado la candidata de publicación y aprovisionado el entorno de ejecución del navegador, antes de cualquier escritura en el patrimonio de staging o de despliegue. Incluye verificaciones de build, de traducción, de aceptación y de navegador cuya entrada significativa es la candidata ensamblada. Tanto el build de staging como el build de puesta en marcha ejecutan las dos fases en este orden.

Un contrato de integridad legible por máquina convierte la división en una partición completa. Cada módulo registrado pertenece exactamente a una fase: los dos conjuntos disjuntos cubren todo el registro. Antes de ese contrato, 26 módulos significativos existían en suites gobernadas fuera de ambas fases de CI.

El conteo describe la cobertura; el comportamiento que cada prueba demuestra determina su calidad. Mil pruebas débiles pueden proteger menos que una sola prueba de comportamiento bien diseñada. La pregunta útil es qué fallo pretende exponer cada familia. A lo largo de las dos fases, el registro incluye, entre otras:

La división sigue los límites técnicos de las entradas. Cada prueba significativa se ejecuta antes de una escritura en el patrimonio, en la fase más temprana donde existen sus entradas reales. Una prueba obsoleta se corrige, mientras que una prueba cuyo propósito ha terminado se retira del registro.

Activar la superficie completa demostró por qué importa la distinción. Varias pruebas dependientes de la candidata habían estado leyendo la salida construida desde la fuente mantenida y, por lo tanto, ejercitando solo un pequeño residuo, o saltándose la prueba por completo. Una vez que CI las ejecutó realmente después de la preparación, apuntar las pruebas a la candidata restauró la evidencia que pretendían y preservó el contenido válido. El registro decía que una prueba existía. La ejecución contra el límite correcto estableció que demostraba algo.

Este es el punto en el que «funciona en mi máquina» dejó de ser relevante. La afirmación significativa pasó a ser: la misma operación gobernada produjo la candidata revisada y la candidata de publicación, y el sistema demostró su relación antes de escribir en el patrimonio.

08Lo que la organización conserva

El resultado visible de este trabajo sigue siendo un sitio web estático, y esa simplicidad es una fortaleza. Un visitante recibe páginas ordinarias con rapidez mientras el sistema que las produjo se retira de la vista.

El resultado importante es que las decisiones de la escuela ahora viven en autoridades compartidas y duraderas.

Las variantes de idioma están registradas. El límite entre la explicación traducida y la sustancia académica canónica está registrado. La identidad de un curso y su relación con un profesor están registradas. Los roles que pueden editar, aprobar y administrar están registrados. La diferencia entre el trabajo local y la automatización de despliegue está registrada. Las condiciones bajo las cuales la publicación debe detenerse están registradas.

Algunas de esas decisiones son código. Algunas son archivos de autoridad, esquemas, pruebas o documentos de operación. Todas son entregables. Junto con el software en funcionamiento, le dicen al siguiente contribuyente por qué existen sus límites.

Esto es también por lo que la documentación es más que un comentario alrededor del paquete «real». Un comando obsoleto en una guía de operador puede causar una publicación fallida. Una descripción inexacta del staging puede fomentar una aprobación durante el único intervalo en el que es insegura. Un descriptor de primitiva legible por máquina puede engañar a un agente con la misma eficacia con que una función rota puede engañar a un programa. La documentación tiene que compararse con la implementación y, donde sea práctico, estar suficientemente estructurada para que las pruebas detecten desviaciones.

El camino hacia esa conclusión incluyó varias correcciones útiles. Los barridos de documentación encontraron que staging-publish se había descrito como el envío desechable de revisión, un rol que correspondía a staging-review. Barridos posteriores precisaron cuándo se confirmaba el puntero en staging y qué ocurría tras un fallo de Git. El código a menudo había sido correcto; la prosa necesitaba ponerse al día.

La corrección duradera trasladó la descripción del ciclo de vida a datos estructurados, restringidos por un esquema y verificados contra el registro activo de primitivas y las especificaciones de build de CI. Una guarda semántica ahora verifica que las primitivas automation-only se presenten a través de su ruta de automatización. Las capacidades de recuperación independientes se representan como rutas independientes, dando a un agente sus relaciones y propósitos previstos con claridad.

Esa historia vale la pena conservarla porque dice algo sobre la deuda técnica. La desviación puede surgir en la prosa actual con la misma facilidad que en el código antiguo, y una explicación pulida puede portar un error con confianza. La respuesta práctica es identificar las afirmaciones operativas con consecuencias materiales y dar a esas afirmaciones una autoridad estructurada cuando hacerlo reduce el riesgo real, mientras la prosa sigue explicando su propósito.

Una vitrina pública con un propósito único e inmutable

Hubo una última prueba de ese razonamiento: ¿podía el sistema mismo convertirse en una exhibición pública segura, transparente y genuinamente útil?

La mayor parte del patrimonio visible ya era pública en el sentido corriente. Un navegador descarga su HTML, CSS, JavaScript, datos estructurados y referencias de medios. Cualquiera puede inspeccionar las páginas que el sistema entrega. Publicar el repositorio revela una vista más amplia: la fuente mantenida, los generadores, las autoridades, las pruebas y el diseño de la maquinaria de publicación aparecen juntos. Ese es el material necesario para entender tanto lo que contiene el sitio como la forma en que la organización trata de mantenerlo coherente.

Una publicación segura requería una copia hecha a propósito. El paquete privado también contenía vinculaciones activas de proveedores, la topología del patrimonio, las identidades del repositorio y del pipeline, las rutas de staging y una función de edge confidencial gobernada. El límite legible por máquina de la instantánea registra el propósito no operativo resultante y sus limitaciones. El diseño permanece inteligible mediante marcadores de posición tipados y superficies inertes, mientras que el mapa operativo permanece dentro de su límite privado gobernado.

Preservar la forma de la infraestructura era esencial para un relato honesto de los mecanismos que este artículo describe. Por eso la copia pública conserva la arquitectura en una forma inerte. Los identificadores activos se convierten en marcadores de posición ilustrativos tipados. Las primitivas orientadas al proveedor y los puntos de entrada administrativos directos se detienen en el límite de la instantánea pública, antes del acceso a identidad, credenciales o red. Las especificaciones de build incluidas reconocen el mismo marcador de inmediato, y las plantillas de infraestructura llevan una condición de despliegue falsa inmutable.

La CloudFront Function confidencial recibió un límite más estricto. La preparación dejó su fuente original sin leer. La ruta permanece para que la arquitectura aún pueda seguirse, mientras que su contenido es un sustituto inerte etiquetado que devuelve una respuesta Hypertext Transfer Protocol (HTTP) 503. La instantánea demuestra el lugar arquitectónico de la función de edge mientras su comportamiento permanece confidencial.

El contenido público siguió una regla de fidelidad byte a byte. El manifiesto público de redacción identifica las seis raíces de contenido y las registra como idénticas byte a byte al árbol fuente. Cubren el sitio web mantenido, el patrimonio entregado y las familias de material complementario awareness, facts, information y Sophia. El mismo manifiesto registra que las 363 entradas de redirección conservadas se resuelven solo a rutas públicas de DSTI, libres de ubicaciones de staging, autenticación y administración. El libro Dsti.ContentInventory se inspeccionó como contenedor de documento y se halló libre de macros, conexiones externas, objetos incrustados, direcciones de correo electrónico no publicadas y rutas del sistema de archivos local.

El resultado se probó luego como su propio objeto, con evidencia específica de la copia pública. Una suite acotada de instantánea pública verifica el límite de ejecución inerte, los esquemas, la captura redactada de CloudFront, la higiene del sistema de archivos y los contratos de build y de contenido independientes del proveedor. Su resultado de verificación registrado contiene 108 pruebas aprobadas en 15 módulos. El generador completo también se ejecutó en una disposición de build aislado y desechable; 284 páginas alcanzaron el control completo de consistencia del patrimonio y el build se completó de forma independiente del acceso al proveedor. Una auditoría de residuos aparte halló la copia publicable libre de coincidencias de credenciales, claves privadas, tokens e identificadores privados.

Solo entonces la copia recibió una historia de Git: un nuevo commit raíz sin padre que contiene únicamente el árbol público. El repositorio público está archivado, mantiene sus flujos de trabajo inactivos y conserva todos los derechos. Su propósito es la transparencia técnica y la educación. El paquete continuo permanece privado y canónico; la exhibición permanece fija en ese punto de publicación.

El ejercicio reprodujo el patrón principal del artículo una última vez. El límite separó el material necesario para entender el sistema del material que podía reconectarlo con el patrimonio activo. La autoridad fue el commit de origen registrado, el manifiesto de redacción y el único árbol inmutable de la instantánea pública. El control fue la combinación de verificaciones de equivalencia de contenido, pruebas de no operabilidad, inspección de contenedores y escaneo de datos sensibles que tenía que pasar antes de que el repositorio se hiciera público.

Por lo tanto, «Hacer todo público» se analizó como un mandato organizacional: hacer la ingeniería inspeccionable, preservar la evidencia necesaria para aprender de ella y preservar una única autoridad operativa clara.

Adónde conduce el juicio humano

El mantenimiento continúa.

Los lectores humanos juzgan la naturalidad más allá de los controles de traducción. El grafo todavía contiene identidades que pueden mejorarse. Las personas deciden si la tipografía es agradable más allá de la automatización de navegador. Una reconciliación docente-curso puede revelar que la Dirección de Estudios usó el mismo código para cursos distintos; la autoridad académica decide el nuevo código. La superficie de pruebas tiene un costo. La documentación puede desviarse y debe releerse contra la implementación.

La gobernanza contiene riesgos particulares y hace visible la incertidumbre restante.

Lo que cambia es dónde se ubica la incertidumbre. Un editor de contenido de rutina puede confiar en que el paquete lleve el proceso de publicación. Un publicador recibe evidencia directa de que el staging y la producción contienen la misma candidata. Un ingeniero futuro puede inspeccionar las relaciones sin resolver directamente en su autoridad. La organización puede decidir dónde se requiere el juicio humano porque las partes mecánicas se han separado de él.

El giro pedagógico

Por eso este sistema pertenece al salón de clases.

ADIS enseña a los estudiantes a comenzar con actividades, eventos, datos, partes interesadas, responsabilidades y restricciones, y luego elegir la implementación que las sirve. El sitio web es ahora un caso de estudio vivo de esa disciplina. Y en su realidad de 2026: asistido por LLM.

«Encontrar a las personas en su propio idioma» se convirtió en un modelo de configuraciones regionales, un límite de traducción y controles a través del patrimonio. «Dar a la organización una memoria compartida» se convirtió en un repositorio gobernado, roles y superficies operativas explícitas. «El mismo profesor y el mismo curso deben seguir siendo la misma cosa» se convirtió en una autoridad de identidad y un grafo de conocimiento. «Lo que aprobamos es lo que publicamos» se convirtió en un compendio en staging, una decisión del publicador y una ruta de despliegue controlada.

En cada caso, la tecnología siguió a la promesa:

Promesa organizacional Límite Autoridad Control
Recibir a los lectores en su idioma mientras se preserva el programa Explicación localizable frente a sustancia académica canónica Autoridades de configuración regional y de terminología Coherencia de traducción, de ruta y de metadatos
Dejar que los editores se concentren en el contenido mientras la automatización gestiona el despliegue Operaciones de contenido local frente a escrituras en el patrimonio de solo automatización Registro de primitivas y modelo de contenido identificado Verificaciones de contexto de ejecución y de sesión de edición
Conservar personas y cursos repetidos como una sola entidad Identidad de entidad frente a ocurrencia de página Autoridades de identidad de docentes y de cursos Verificaciones de unicidad, de simetría y de Schema.org
Publicar exactamente lo que se revisó Edición local, candidata en staging y patrimonio activo Estado Git canónico más compendio del contenido en staging Verificaciones de candidata, de punto de despliegue y de reversión
Hacer la ingeniería inspeccionable dentro de un límite público seguro Explicación pública del sistema frente a vínculos del patrimonio activo Commit raíz público inmutable y manifiesto de redacción Verificaciones de equivalencia de contenido, de operación inerte y de residuo sensible

La tabla hace visible el hilo conductor mientras el sistema continúa evolucionando. Los límites mantienen precisa cada promesa. Las autoridades dan a las decisiones un hogar duradero. Los controles convierten esas decisiones en condiciones que el sistema protege activamente.

La parte 1 describió la reconstrucción de tres semanas que hizo posible un patrimonio estático coherente. La parte 2 trata de lo que ocurrió cuando ese patrimonio tuvo que volverse organizacionalmente confiable. El segundo problema era menos visible y, en muchos sentidos, más difícil. Significó construir controles útiles y retirar ceremonia; agregar pruebas y corregir las que habían confundido la expresión local con una desviación factual; publicar datos estructurados y decidir qué eran realmente las entidades; y luego hacer visible la fuente mediante una exhibición pública cuya operación permanece inerte de forma segura.

El sitio se convirtió en un sistema de ingeniería cuando las promesas de la organización adquirieron límites, autoridades y evidencia —y cuando el sistema aprendió a declarar el alcance exacto de cada prueba.

El código vino al final. Debería seguir siendo así.