Context
Discovered during code review of the incremental re-indexing implementation (issue #13).
Description
_file_from_id() in loader.py handles these prefixes: file:, class:, func:, method:, endpoint:, gqlop:, atom: — but not iface: (Interface nodes). Interface node IDs won't match the file extraction logic, so interface nodes are never included in touched_files filtering.
Currently benign: edges involving interfaces always have a class: or file: node on the other side, so the edge still passes the filter via that other endpoint, and no orphaned data is possible. However, if interface-to-interface edges are ever added, or if _file_from_id is used in a stricter context, interfaces will silently fall through.
Suggested approach
Add an iface: case to _file_from_id following the same pattern as class: (i.e. split on # after the prefix to extract the file path).
Context
Discovered during code review of the incremental re-indexing implementation (issue #13).
Description
_file_from_id()inloader.pyhandles these prefixes:file:,class:,func:,method:,endpoint:,gqlop:,atom:— but notiface:(Interface nodes). Interface node IDs won't match the file extraction logic, so interface nodes are never included intouched_filesfiltering.Currently benign: edges involving interfaces always have a
class:orfile:node on the other side, so the edge still passes the filter via that other endpoint, and no orphaned data is possible. However, if interface-to-interface edges are ever added, or if_file_from_idis used in a stricter context, interfaces will silently fall through.Suggested approach
Add an
iface:case to_file_from_idfollowing the same pattern asclass:(i.e. split on#after the prefix to extract the file path).