Phase 1 aligns the search contract for the reference clients with the API parity decisions from docs/reference/parity/search-semantics-matrix.md.
For live screen search in Node and Python:
find
Matchexists
Matchnull / Nonewait
MatchwaitVanish / wait_vanish
true when the target is absentfalse after timeoutNode 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 now follows the same model as Node:
find propagates the API miss errorwait propagates the API timeout errorwait_vanish is client-composed over exists_on_screen and returns boolLua 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: