Skip to content

fix(gitnexus): reindexar no puede borrar los embeddings, y se verifica al final - #247

Merged
wolverin0 merged 1 commit into
mainfrom
fix/gitnexus-reindex-preserves-embeddings
Aug 31, 2026
Merged

fix(gitnexus): reindexar no puede borrar los embeddings, y se verifica al final#247
wolverin0 merged 1 commit into
mainfrom
fix/gitnexus-reindex-preserves-embeddings

Conversation

@wolverin0

Copy link
Copy Markdown
Owner

El riesgo

npx gitnexus analyze sin --embeddings no los deja como estaban: los borra. Hoy son 12.079 y regenerarlos es caro.

Dónde NO estaba el problema

Mi primera lectura culpó al hook de Claude Code. Estaba equivocadagitnexus-hook.cjs:284 ya arma el comando bien:

const analyzeCmd = `npx gitnexus analyze${hadEmbeddings ? ' --embeddings' : ''}`;

Dónde sí está

En los docs del propio repo. AGENTS.md y CLAUDE.md muestran el comando pelado en dos lugares — línea 95 ("run npx gitnexus analyze in terminal first") y el bloque Keeping the Index Fresh.

Y ahí está lo que descarta el arreglo obvio: ese texto vive dentro de <!-- gitnexus:start -->, que el propio analyze reescribe. Corregirlo a mano dura hasta el próximo reindex. Esto no se arregla documentando.

Lo que sí sobrevive a la regeneración

Una vía que no depende de recordar el flag, y que verifica el invariante después de correr:

Función Qué fija
analyze_command(n) El flag se decide por el conteo real del índice, no por memoria
verify_preserved(before, after) Compara contra el conteo previo, no contra cero
embedding_count() Un meta ausente o ilegible es 0, no una excepción

El detalle que importa en verify_preserved: un índice que pasó de 12.079 a 3 está roto igual, y un chequeo ingenuo (after > 0) lo daría por bueno. Por eso la comparación es contra el conteo anterior.

Recordar un flag es una esperanza; verificar el conteo después es un hecho.

Verificación

9 tests. Y 4 mutaciones, cada una desactivando una decisión:

Mutación Muere por
Nunca agrega --embeddings test_con_embeddings_el_flag_no_es_opcional
Lo agrega siempre test_sin_embeddings_no_se_agrega_el_flag
Sólo detecta pérdida total test_detecta_la_perdida_PARCIAL
Da por bueno cualquier resultado test_detecta_la_perdida_total

Contra el índice real: reporta 12.079 y arma el comando con el flag. Ruff limpio.

…a al final

`npx gitnexus analyze` sin `--embeddings` no los deja como estaban: los BORRA.
Hoy son 12.079 y regenerarlos es caro.

El PostToolUse hook de Claude Code YA arma bien el comando —agrega el flag
cuando detecta embeddings, `gitnexus-hook.cjs:284`— asi que no era ahi. El
peligro esta en los docs del repo: AGENTS.md y CLAUDE.md muestran el comando
pelado en dos lugares (linea 95 y el bloque "Keeping the Index Fresh"), y viven
dentro de `<!-- gitnexus:start -->`, que el propio analyze reescribe. Corregir
ese texto dura hasta el proximo reindex: no se arregla documentando.

Lo que si sobrevive a la regeneracion es una via que no depende de recordar el
flag y que VERIFICA el invariante despues de correr:

- `analyze_command(n)` decide el flag por el conteo real del indice.
- `verify_preserved(before, after)` compara contra el conteo PREVIO, no contra
  cero: un indice que paso de 12.079 a 3 esta roto igual, y `after > 0` lo
  taparia. Sale distinto de cero si bajaron.
- `embedding_count()` trata un meta ausente o ilegible como 0 sin reventar: un
  indice que todavia no existe no es un error.

Recordar un flag es una esperanza; verificar el conteo despues es un hecho.

9 tests, y 4 mutaciones —no agregar nunca el flag, agregarlo siempre, detectar
solo la perdida total, dar por bueno cualquier resultado— mueren cada una por su
test propio. Verificado contra el indice real: reporta 12.079 y arma el comando
con el flag.
@wolverin0
wolverin0 merged commit 7ab9815 into main Aug 31, 2026
41 of 43 checks passed
@wolverin0
wolverin0 deleted the fix/gitnexus-reindex-preserves-embeddings branch August 31, 2026 16:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant