Open an already-built graph, kicking off a one-shot background build when the
property graph is not fully populated so the next call is fast. Returns
None on this call when nothing is ready yet. Best-effort callers
(dashboards, context gate, stats, ctx_graph) use this; callers that need a
graph right now use open_or_build, which builds synchronously instead.
Hot-path open for optional enrichment (post-read hints, silent preload):
only a fully populated property graph, opened from SQLite. Never parses the
JSON index and never builds synchronously — when the graph is not ready it
schedules the background build and returns None, so the caller simply
skips its optional work. A read must not wait seconds (or a 30 s build) for
a hint it may not even show.