Memory-file extraction re-mints doc concepts under variant ids — near-duplicate nodes survive dedup
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 55/100
Línea de trabajo
Start by tracing the merge path that combines extracted nodes, then inspect graph.json and the cached extraction entry under graphify-out/cache/semantic/…. Reproduce the memory-file update case and compare the canonical and variant concept ids. Done means repeated extraction does not leave near-duplicate concept nodes and the AMBIGUOUS edge is attached to the canonical node.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
When a saved query memory (graphify-out/memory/query_*.md) is re-extracted on --update, concepts it mentions that already exist as doc-concept nodes can be minted under a different node id, producing a duplicate that id-based dedup cannot catch.
Evidence
Repo: rails-ai-bridge, graphifyy 0.9.61.
- Original doc extraction of
docs/port-registry-resolution.mdminteddocs_port_registry_resolution_resolver(label "Registry Resolver"). - A memory file describing that same concept minted
docs_port_registry_resolution_registry_resolver(label "Registry Resolver (port-registry-resolution doc concept)") — same stem, different entity suffix. - Both nodes coexisted in graph.json; the duplicate carried an AMBIGUOUS edge that belonged on the canonical node.
The node-id rule ({stem}_{entity}) makes the id deterministic from the label, so any label variation — parenthetical qualifiers, "Registry Resolver" vs "Resolver" — forks the id. Memory files quote concepts with extra qualifiers often enough that this recurs.
Suggested fix
One of:
- Label-normalized dedup for concept nodes: when merging, treat a new concept node as a duplicate if its normalized label (strip parentheticals, lowercase) matches an existing node with the same stem prefix — merge edges onto the canonical id.
- Canonical-id resolution at extraction: memory-file extraction could resolve mentioned concepts against the existing graph's node ids before minting new ones.
Option 1 is local to the merge path and doesn't require the extractor to know the existing graph.
Workaround applied locally
Rewrote the cached extraction entry (graphify-out/cache/semantic/…) to emit the canonical id and merged the node in graph.json. Holds until the memory file changes and the cache entry invalidates.
- 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 7 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 8 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 10 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
-
tests/strategies_test.py:174 goes uncovered on about 1 run in 100, failing the coverage ratchetAbiertoflaky-watch
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
btclib-org/btclib#2839 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
nion-software/nionswift#2018 ·
Los mantenedores suelen responder en 1 día
-
Deleting a member fails when another member's share transfer points to themPosiblemente ocupada @Beerlesklopfer la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
FoodCoopX/wirgarten-tapir#1336 ·
Los mantenedores suelen responder en 3 días
-
pydanty:is-working
Dificultad 2/5 1-3 horas Aptitud para principiantes 71/100
pydantic/pydantic-ai#11467 ·
Los mantenedores suelen responder en 1 día
-
Link Checker ReportAbiertoautomated issue linkchecker report
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
QuantEcon/lecture-python.myst#1098 ·
Los mantenedores suelen responder en 1 día