One analyze_function call through the snapshot cache Top row: the call analyze_function with procedure _percent_change passes the cacheable test, because Ghidra marks the operation cachePolicy snapshot and mutatesArtifact false, and becomes a query id. Middle: the query id is the SHA-256 of canonical JSON holding the target digest 01b5d08b08fb with kind executable, format mach-o and architecture arm64, the binding of provider ghidra 12.1.4 with profile digest 3fc72c9b4b7, the operation, and the parameters. Bottom left: on a hit the entry is replayed with the limitation that the call did not re-run the provider. Bottom right: on a miss the Ghidra bridge answers, Evidence ev_b492c85e is recorded, and an entry is stored under the id. Last row: a mutating call such as annotate_native_function invalidates the cache before rea dispatches it to Ghidra, even when its reply later fails, and later snapshot exports are refused. analyze_function {"procedure": "_percent_change"} cacheable? cachePolicy snapshot mutatesArtifact false query id query_ and a SHA-256 yes query_ = SHA-256 of canonical JSON target: sha256 01b5d08b, executable, mach-o, arm64 binding: provider ghidra 12.1.4, analysis_profile digest 3fc72c9b operation: analyze_function parameters: {"procedure": "_percent_change"} entry found: replay it limitation added: Loaded from a local REA analysis snapshot; this call did not re-run the provider. no entry: call the Ghidra bridge 5 to 7 s for the first call on a target, then Evidence ev_b492c85e is recorded and an entry is stored under the id hit miss annotate_native_function a mutating call, before rea dispatches it to Ghidra invalidateSnapshot entries dropped, even if the call fails, lookups miss, snapshot exports refused