ADR 0076 — Las líneas no son código
This content is not available in your language yet.
Estado: aceptado · Fecha: 2026-10-26
Contexto
Sección titulada «Contexto»La pestaña Cambios seguía enseñando ficheros que nadie había tocado. En este repositorio, con
core.autocrlf=true en Windows, la comparación con HEAD analizaba dos textos distintos para el mismo
código: git archive exporta el commit con CRLF y el árbol de trabajo tenía LF. El hash del cuerpo
de cada símbolo cambia con los saltos de línea, así que la lente de símbolos veía cambios donde solo
había un \r: decenas de ficheros intactos aparecían como modificados.
El segundo ruido estaba en el emparejamiento: compareSymbols guardaba un símbolo por nombre. Un
fichero con dos listener anidados o con el constructor de dos clases perdía uno, y el superviviente
se comparaba contra el otro del head: cambiado, añadido o eliminado en un fichero que nadie abrió.
Decisión
Sección titulada «Decisión»- Al leer el fuente se normalizan los finales de línea (CRLF y CR suelto pasan a LF). Es el último paso antes de parsear y medir, así que vale para el disco, la memoria del navegador y el export del HEAD por igual.
- Los símbolos del mismo nombre se emparejan por orden de aparición, no con un mapa que se queda con uno.
Consecuencias
Sección titulada «Consecuencias»- El mismo código da el mismo checksum en cualquier plataforma y con cualquier
core.autocrlf: la regla de que el checksum depende del código, no de lo instalado, gana un caso que no cubría. - Los snapshots de un repo con CRLF en el árbol cambian de checksum una vez. No cambia el formato ni
el modelo:
cc.jsonsigue igual. - Cambios deja de inventar ficheros: la lente de símbolos solo enseña lo que se tocó de verdad.
rloc,locy las líneas de los símbolos no cambian de valor; lo que cambia son los hashes.
Alternativas descartadas
Sección titulada «Alternativas descartadas»- Normalizar solo el export del HEAD. Arregla este caso y rompe el contrario: el árbol con CRLF seguiría pareciendo distinto del commit.
- Comparar textos ignorando espacios en el diff de símbolos. Esconde el problema en vez de resolverlo: los hashes seguirían dependiendo del checkout.
- Pedir
core.autocrlf=falseen la documentación. Deja mal a cualquier repo ya clonado en Windows y el producto seguiría dependiendo de la configuración de git de cada máquina.
Hoja de ruta
Sección titulada «Hoja de ruta»M57 — Las líneas no son código
Sección titulada «M57 — Las líneas no son código»- El analizador normaliza CRLF a LF al leer el fuente.
- Los símbolos del mismo nombre se emparejan por orden.
- Un test comprueba que CRLF y LF dan el mismo snapshot y los mismos símbolos.
- Un test comprueba que dos símbolos homónimos intactos no producen cambios.
El registro de lo hecho vive en el feed de la guía.