The previous fix prevented phantom 'entity' node pollution but left
_linked_graphs as pure in-memory state, so navigate_to() silently
broke after save_to_file()/load_from_file().
Changes:
- Add graph_id (UUID) to ContextGraph so instances are identifiable
- save_to_file() now writes a 'links' section with link_id,
source_node_id, target_node_id, and other_graph_id
- load_from_file() restores graph_id and populates _unresolved_links
- navigate_to() raises a clear KeyError with resolve_links() hint when
a link exists but hasn't been reconnected yet
- New resolve_links(registry) method reconnects links post-load given
a {graph_id: ContextGraph} mapping; returns resolved count
- Add 14 tests in tests/context/test_cross_graph_navigation.py covering
link creation, phantom-node prevention, and full save/load round-trips
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>