mirror of
https://github.com/logos-co/logos-protocol.git
synced 2026-08-31 05:51:08 +00:00
#40 merged, so this is retargeted from its branch to master. One conflict, in tests/protocol/CMakeLists.txt: pure add/add, #40's test_lp_invoke_async_error and this branch's two files all kept. 270/270. Also amends the lp_invoke_async contract text that #40 landed. It said `cb` carries "the same outcome the sync twin splits across its return code and out-params", illustrated with "object_unavailable when the target module is not loaded". That is a statement about PARITY, and it reads as one about COVERAGE -- and the illustration was the case #40 did not fix: on the plain transport requestObject never checks publication, so an unloaded module behind a live host is a MODULE_NOT_LOADED result at call time, not an acquire failure. #40's object_unavailable fired only when the whole endpoint was down. This branch makes the example true, so the text can now be precise rather than aspirational. It states what ok == 0 covers -- acquire failure, deadline exceeded, rejected token, MODULE_NOT_LOADED from a live host, on BOTH twins -- and what it does not: * an unknown method name, because every provider answers one with a bare null, byte-identical to a method that legitimately returns null. The distinction does not exist on the wire to be reported; closing it needs a provider-contract change across the SDKs. * a provider's rejection of well-formed arguments (dispatch_failed), which arrives as a result and is folded by the generated wrappers, in neither twin -- deliberately, and symmetrically. An ABI doc that overstates coverage is worse than one that admits a gap: it is what a port is written against. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>