Incremental hook rebuild silently zeroes all nodes for 168 detected, unchanged, non-ignored files; shrink guard does not refuse
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 52/100
Línea de trabajo
Start with _rebuild_code in watch.py, then trace _reconcile_existing_graph and _check_shrink at lines 1413 and 1662 using the reported incremental post-commit rebuild. Reproduce the 168-file zero-node case and compare the incremental result with a full rebuild. Done means unchanged detected files retain their nodes and the shrink guard refuses an unaccounted graph reduction.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Environment
- graphifyy 0.9.42
- Windows 11, Python 3.13, git 2.53.0.windows.1
- Corpus: 4496 files, ~37.5k nodes, rebuilt by the installed
post-commithook (_rebuild_code(_root, changed_paths=changed))
Summary
A single incremental post-commit rebuild with 3 changed paths took the graph from 37482 to 36591 nodes. In that one run, 168 source files went from N nodes to exactly zero (1588 nodes), and nothing in the log mentioned any of them. Subsequent incremental rebuilds stayed pinned at 36591 forever; a full rebuild restored all 168 files and exactly 1588 nodes.
The affected set has a clean fingerprint: 165 of the 168 files live inside git submodules or at untracked paths in the parent repo (two submodules: 148 files; one untracked directory plus a handful of untracked root-level .md files: 18; tracked: 2). File types: 78 .md, 38 .tsx, 35 .ts, 6 .sql, 5 .sh, 3 .json, 3 js/mjs/cjs.
What was ruled out, by measurement
-
Not extraction.
extract_markdownon one of the zeroed files returns 32 nodes right now. -
Not detection.
detect(Path(root))returns all 4496 files, including all 169 of the affected paths that exist on disk (the other 5 "sources" in the diff are import stubs likereact,node:fs). -
Not corpus eviction.
manifest.jsonstill carries every one of them, withseenstamped at that rebuild and an unchangedast_hash(byte-identical to the pre-loss manifest row apart fromseen). So graphify saw them and considered them unchanged. -
Not an ignore rule (#2495 / #1795).
ignored_predicate(root, gitignore=False)andignored_predicate(root, gitignore=True)both returnFalsefor all 169. -
No warning was emitted. The rebuild log for that run contains no
produced zero nodesline, noexcluded but alivemessage, and no shrink warning. It reads as a clean success:[graphify hook] 3 file(s) changed - rebuilding graph... Graph has 36591 nodes (above 5000 limit). Building aggregated community view... [graphify watch] Rebuilt: 36591 nodes, 64913 edges, 2127 communitiesThe immediately preceding run logged
Rebuilt: 37482 nodes, 65657 edges. -
Not recoverable incrementally. Two further hook rebuilds produced exactly 36591 again. Only
_rebuild_code(root, changed_paths=None)healed it: 37950 nodes, and all 168 files back with exactly 1588 nodes restored.
Second bug in the same run: the shrink guard did not refuse
This run had changed_paths set, so rebuilt_sources was 3 files (watch.py:1413). 1588 lost nodes belonged to files that were not in that set, so _check_shrink at watch.py:1662 should have hit the _accounted check, failed it, and refused the write.
It did not. The only two ways past _check_shrink are:
if force or not existing_data:
return True
force is False (the hook only sets it from GRAPHIFY_FORCE, which was unset), which leaves existing_data arriving empty or falsey from _reconcile_existing_graph. If reconcile can return {} on a path where the graph was in fact loaded and preserved from, then the guard is silently disarmed for that whole class of rebuild.
Why this is bad
Everything about the run looks healthy: the files are detected, manifest-stamped, unchanged by hash, not ignored, and extractable. Their nodes simply stop existing, incremental rebuilds can never bring them back because those files are never re-extracted again, and the guard that exists to catch exactly this said nothing. The only signal was a 2.4% drop in the node count printed in the log.
Happy to run any instrumented build against the same tree; the failure is reproducible in the sense that the graph re-entered the bad state twice and the full rebuild consistently fixes it.
- Lenguaje dominante
- Python
- Estrellas
- 124k
- Forks
- 11.9k
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Graphify-Labs/graphify
-
hooks: last-resort `python3` probe launches the Microsoft Store redirector on Windows (visible console flash, exit 9009)Posiblemente ocupada @Deepjyoti-Sarmah la tomó hace 6 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Graphify-Labs/graphify#4563 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
GRAPHIFY_DISABLE_THINKING is ignored by the claude backend, so thinking eats max_tokens and extraction truncatesPosiblemente ocupada @bercedev la tomó hace 7 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 69/100
Graphify-Labs/graphify#4546 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
--update runbook: graph.json backup instruction comes after the diff that needs it, so the graph diff never runsPosiblemente ocupada @sunildivakar96-cpu la tomó hace 8 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Graphify-Labs/graphify#4539 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[Bug] Pi skill uses unsupported general-purpose subagent instead of delegateQuizá libre de nuevo @bercedev la tomó hace 9 días y no hay ningún pull request abierto. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Graphify-Labs/graphify#4494 · 7 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Graphify-Labs/graphify#3763 ·
Los mantenedores suelen responder en 1 día
Todos los issues de Graphify-Labs/graphify
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
NVIDIA/flare-local-inference#90 ·
Los mantenedores suelen responder en 1 día
-
area/streaming comp/gateway P2 platform/telegram type/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
NousResearch/hermes-agent#144897 ·
Los mantenedores suelen responder en 1 día
-
request-theme
Dificultad 1/5 Menos de una hora Aptitud para principiantes 66/100
LizardByte/ThemerrDB#9575 ·
Los mantenedores suelen responder en 1 día
-
Author Page: noshin-nawalAbiertoauthor-page correction
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
acl-org/acl-anthology#10599 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
zilliztech/memsearch#818 ·
Los mantenedores suelen responder en 1 día