Contenido vinculado¶
Un tema se da un año, y al siguiente otra vez. La misma lección entra en Análisis I y en el doble grado. Una hoja de problemas del departamento la usan cuatro personas.
La respuesta fácil es copiar, y la respuesta fácil siempre acaba igual: cuatro copias que divergen, una errata corregida en tres de ellas, y nadie que sepa cuál es la buena.
Didacta no copia. Lo que hace es distinguir qué es una cosa de dónde aparece.
CONTENIDO qué es una lección, un tema
UBICACIÓN dónde aparece en este curso, en esta asignatura, en esta posición
Varias ubicaciones pueden apuntar al mismo contenido. Editarlo desde cualquiera de ellas lo cambia en todas — no porque algo se propague, sino porque es el mismo fichero.
flowchart LR
subgraph U["Un solo tema"]
T["Series numéricas"]
end
T --> A["Análisis I<br/>2025-2026"]
T --> B["Análisis I<br/>2026-2027"]
T --> C["Matemáticas<br/>2026-2027"]
La mitad ya era así¶
Conviene decirlo, porque explica por qué esto no cambia nada de lo que ya funcionaba: una lección nunca fue una copia. Esta línea de la composición de un curso
no guarda contenido: nombra una lección que vive una sola vez en content/.
Los treinta cursos que la llaman llaman a la misma, y por eso corregir una
errata siempre ha sido corregirla una vez.
Lo que faltaba eran tres cosas:
- poder decirlo desde la aplicación, en lugar de editar el
year.yaml; - que un tema entero —con su título, su orden y sus apartados— se pudiera compartir igual, porque copiarlo sí duplicaba;
- que la identidad no dependiera de la ruta, que es lo que se rompe el día
que alguien reorganiza
content/.
Un id que no es la ruta¶
Cada lección declara un identificador propio en su unit.yaml:
La ruta sigue siendo la dirección —es lo que escribe \DidactaUnit y lo que
lee LaTeX—, pero la identidad es el id. Mover la carpeta ya no rompe quién
la usa, y «este material, ¿dónde más está?» sigue teniendo respuesta después
de reorganizar la biblioteca.
Los ids son opacos a propósito. Uno legible es uno que alguien acaba editando para que «se entienda mejor», y ese día dos entidades distintas comparten identidad.
Un repositorio de antes no se rompe
Sin id: declarado, Didacta lo deduce de la ruta como ha hecho siempre.
Ponerlos al día es una operación explícita, con su propio commit, que no
mueve ni renombra nada.
Un tema compartido¶
Cuando un tema se da en más de un sitio, su contenido se muda a la raíz del repositorio y cada curso se queda con la ubicación:
id: d-8a41f0c27b53
kind: theory
title:
es: "Tema 4: series numéricas"
structure:
- unit: analisis/series/convergencia
- unit: analisis/series/criterios
El id local se conserva porque es el nombre del .tex que compila y el de la
carpeta de salida: cada curso tiene su portada y su año. El cuerpo sale de un
solo sitio.
Un tema que solo se da en un curso no cambia nada: se queda escrito donde estaba, exactamente como hasta ahora. Compartir no es obligatorio para escribir un curso.
El grupo de sincronización no se guarda¶
Esto es lo que hace que el modelo se sostenga, y merece una frase propia: no hay ninguna tabla de vínculos en ninguna parte. El grupo es el conjunto de ubicaciones que nombran el mismo id, y se calcula leyendo los ficheros.
Una tabla aparte sería una segunda fuente de verdad que puede contradecir a
los ficheros, y reconciliar las dos después de un git merge es exactamente
el problema que esto existe para no tener.
De ahí salen dos propiedades que se notan:
- un clon limpio lo reconstruye todo, porque los vínculos son los ficheros;
- da igual quién lo haya hecho. Si alguien vincula un tema desde otro
ordenador, desde el terminal o editando el YAML a mano, un
pulllo trae y Didacta lo ve igual.
Las cuatro operaciones¶
Son cuatro cosas distintas y la aplicación las ofrece por separado, porque confundirlas es cómo se pierde material: alguien cree que está copiando y está compartiendo, o al revés.
| Qué hace con el contenido | Qué hace con las ubicaciones | |
|---|---|---|
| Mover | nada | quita una y pone otra |
| Añadir vinculado | nada | añade una |
| Duplicar | crea uno nuevo, con id propio | la nueva apunta al nuevo |
| Dividir vinculación | clona el contenido para un subconjunto | las reparte entre los dos |
Por dentro son la misma pieza vista desde cuatro sitios —duplicar es dividir con un grupo de uno— y están escritas así a propósito: una sola manera de clonar una entidad, y cuatro nombres arriba porque lo que se quiere hacer es distinto en cada caso.
Dividir¶
El caso que llega tarde y siempre llega: dos asignaturas compartían el tema y este año dejan de hacerlo.
Un tema que se separa
Análisis 2025-26, Análisis 2026-27, Matemáticas 2026-27 y
Doble Grado 2026-27 dan el mismo tema.
Se reparten en dos grupos: los dos de Análisis por un lado, Matemáticas y el doble grado por otro.
Al confirmar, los dos de Análisis conservan la entidad de siempre; los otros dos reciben una copia con identidad propia, con el contenido tal como está hoy. Dentro de cada grupo siguen sincronizados; entre grupos, ya no.
Un grupo que se queda con una sola ubicación deja de ser un grupo: su contenido vuelve a estar escrito en su curso. Un fichero compartido que no comparte con nadie es una indirección que solo estorba.
Qué pasa con las lecciones de dentro¶
Separar dos temas casi nunca quiere decir separar las cuarenta lecciones que llevan dentro. Por eso, por defecto, no se duplican: el tema se separa y el material sigue siendo uno, que es justo lo que hace útil tener una biblioteca.
Quien quiera la rama entera independiente lo marca al dividir, y entonces sí se clona cada lección. Está apagado por defecto porque generar cuarenta identidades que nadie pidió no se deshace con un botón.
Cómo se hace, en la aplicación
Y todo esto vive en git¶
Los ids, los ficheros compartidos y las ubicaciones son ficheros de texto
versionados. Eso no es un detalle de implementación: es lo que hace que un
clone en otro ordenador vea los mismos vínculos, que un pull traiga los
que hizo otra persona, y que una versión congelada
enseñe los que había aquel día.