KikoCis commited on
Commit
c2b45e8
·
verified ·
1 Parent(s): f0ce937

fix: el dedup ya no colapsa enumeraciones (grep -n perdia la ubicacion)

Browse files
Files changed (1) hide show
  1. js/acer-core.js +15 -1
js/acer-core.js CHANGED
@@ -203,9 +203,23 @@ function cosine(a, b) {
203
  return (na && nb) ? d / Math.sqrt(na * nb) : 0;
204
  }
205
  function dedupKey(s) {
206
- return s.replace(/^\s*\d+→/, '').replace(/^\s*\d+:\s*/, '').replace(/\s+/g, ' ').trim().toLowerCase();
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  }
208
 
 
209
  /**
210
  * Fusión por rangos recíprocos (RRF).
211
  * Entrada: varias listas de ids ORDENADAS de más a menos relevante.
 
203
  return (na && nb) ? d / Math.sqrt(na * nb) : 0;
204
  }
205
  function dedupKey(s) {
206
+ // ⚠️ El número de línea NO se borra cuando es lo único que distingue dos
207
+ // líneas idénticas. Antes se quitaba siempre, y eso colapsaba la salida de
208
+ // `grep -n`: "10: return 42;" y "87: return 42;" caían en la misma clave y
209
+ // se quedaba UNA. Pero «¿dónde está definido X?» es la pregunta más común de
210
+ // un agente de código, y la respuesta ES el número: darle un sitio de tres es
211
+ // darle una respuesta incompleta que parece completa.
212
+ //
213
+ // Regla: se normaliza el espaciado (eso sí es ruido) pero la posición se
214
+ // conserva como parte de la identidad de la línea. Solo colapsan las líneas
215
+ // que son iguales TAMBIÉN en dónde estaban — repeticiones de verdad, como
216
+ // "}" o el encabezado "[resultado …]" saliendo veinte veces.
217
+ const body = s.replace(/\s+/g, ' ').trim().toLowerCase();
218
+ const at = s.match(/^\s*(\d+)\s*[:→]/);
219
+ return at ? at[1] + '|' + body : body;
220
  }
221
 
222
+
223
  /**
224
  * Fusión por rangos recíprocos (RRF).
225
  * Entrada: varias listas de ids ORDENADAS de más a menos relevante.