You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When a dispatched file's semantic result contains edges but no nodes (model omission), the empty entry is written to cache/semantic/ keyed by content hash — so every subsequent run is a cache hit and the file is permanently frozen out of the graph. The console warning says "a re-run will retry them", but the cache makes that false.
On large batches the model routinely omits files from its response — observed warning rates of 6/20, 5/8, 8/9, 9/15 dispatched file(s) produced no nodes.
But a file that received only edges (nodes list empty) does get a by_file entry in save_semantic_cache — cached as {"nodes": [], "edges": [...]}.
Every later run: content hash unchanged → cache hit → never re-dispatched. Observed: a corpus's most-referenced hub document sat at 0 nodes indefinitely; every edge pointing into it dangled and was pruned.
It cannot be healed from the outside either: other files' extractions that mention it are discarded by the allowed_source_files guard, and evicting the cache entry alone is not sufficient because _detect_incremental still reports the file unchanged (the manifest entry must be removed too).
Suggested fix
In save_semantic_cache, skip writing any per-file entry whose nodes list is empty — the file then stays uncached and genuinely re-dispatches on the next run, making the existing "a re-run will retry them" behavior true. We run 0.9.16 with exactly that patch (a warnings.warn on the skip); unit-verified that the edges-but-no-nodes shape no longer caches while normal results cache unchanged.
Summary
When a dispatched file's semantic result contains edges but no nodes (model omission), the empty entry is written to
cache/semantic/keyed by content hash — so every subsequent run is a cache hit and the file is permanently frozen out of the graph. The console warning says "a re-run will retry them", but the cache makes that false.Environment
graphifyy 0.9.16, Python 3.12 (WSL2 Ubuntu 24.04), gemini backend, markdown corpus.
Mechanism
6/20,5/8,8/9,9/15 dispatched file(s) produced no nodes.by_fileentry insave_semantic_cache— cached as{"nodes": [], "edges": [...]}.allowed_source_filesguard, and evicting the cache entry alone is not sufficient because_detect_incrementalstill reports the file unchanged (the manifest entry must be removed too).Suggested fix
In
save_semantic_cache, skip writing any per-file entry whosenodeslist is empty — the file then stays uncached and genuinely re-dispatches on the next run, making the existing "a re-run will retry them" behavior true. We run 0.9.16 with exactly that patch (awarnings.warnon the skip); unit-verified that the edges-but-no-nodes shape no longer caches while normal results cache unchanged.