Client Search Semantics Surface

Phase 1 aligns the search contract for the reference clients with the API parity decisions from docs/reference/parity/search-semantics-matrix.md.

Contract

For live screen search in Node and Python:

Node

Node now treats find and wait as thin wrappers over the API contract. It no longer synthesizes local "match not found" or "wait timeout" errors when the transport already returns a stable gRPC status.

waitVanish is client-composed over exists, which is acceptable for this phase because the underlying API parity contract is already frozen.

Python

Python now follows the same model as Node:

Lua

Lua remains a descriptor-level grpcurl transport client in this phase. It does not currently expose the same object wrapper surface as Node and Python, but it also does not add independent miss/timeout reinterpretation on top of the API.

That means: