mirror of
https://github.com/safishamsi/graphify.git
synced 2026-07-13 02:47:00 +00:00
b46634ef7a
BREAKING node-ID format change. The stem that prefixes every node id was the immediate parent dir + filename, so same-named files in different directories collided into one last-writer-wins node and silently dropped graph content (docs/v1/api/README.md and docs/v2/api/README.md both -> api_readme). The stem is now the full repo-relative path (docs_v1_api_readme vs docs_v2_api_readme); top-level files are unchanged (setup.py -> setup). - extractors/base.py::_file_stem -> full path (as_posix; make_id collapses separators). The two hand-copied stems (symbol_resolution, mcp_ingest) now import the canonical one, so they can't drift again. - llm.py system prompt + extraction-spec fragments aligned to the same rule, fixing the #1509 AST<->LLM divergence (prompt used zero parent dirs -> ghosts). Regenerated + blessed the per-host specs. - build_from_json deterministically re-keys every non-AST node id from its source_file via the new stem (and registers old-stem aliases), so a cached or pre-migration semantic fragment carrying an old short id reconciles with the AST node instead of spawning a ghost. The semantic cache is unversioned, so this code-side re-key (not LLM prose) is what makes it survive the format change with no re-bill. AST nodes are already canonical and skipped. - Migration: existing graphs migrate automatically on the next build/update (the re-key runs in build_from_json, including the whole graph fed back through build_merge); `graphify extract --force` for a clean rebuild. Neo4j persisted stores need a re-import; GraphML layouts go stale. Full suite green (2505 passed); #1504 collision fixed and old-id fragments re-keyed verified by smoke. Lands on v9 for review before a 0.9.0 release. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>