mirror of
https://github.com/logos-co/logos-evm-uniswap-module.git
synced 2026-08-27 04:01:08 +00:00
* ci: executable doc-test (logoscore runtime, Multicall3 round-trip) + publish workflow Adds a logos-doctest spec that installs uniswap_module + eth_rpc_module under a logoscore daemon, reads the seeded multi-chain config, then prices USDC via a real Multicall3 eth_call to a local mock node (1 WETH = 3000 USDC), proving the batch->eth_rpc->decode path end-to-end. Plus the doctests/run.sh regenerator and the PR/master CI workflow that publishes the rendered report to GitHub Pages. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(doctest): use verbatim aggregate3 hex + escaping-robust assertions The hand-split per-word hex dropped a byte (price off by 256x); inline the exact continuous Multicall3 return. Assert on substrings that survive the daemon's double-JSON-encoded reply. Doc-test now 22/22 green (WETH prices at $3000). * docs(doctest): render outputs/uniswap-module-runtime.md (22/22 green) * fix(doctest): tolerate 'logoscore stop' exit on teardown (|| true) The daemon-stop teardown step can be SIGTERM'd (exit -15) on CI runners under 'bash -e', reddening an otherwise-green run. Make the teardown non-fatal so the published report reflects the actual assertions. * fix(doctest): retry idempotent reads on transient RPC_FAILED The first proxied call that drives a module through a blocking network round-trip can hit a cold-replica/transport race on loaded CI runners (RPC_FAILED). The affected calls are pure reads, so wrap them in a bounded retry-with-backoff (6x, 3s) — the textbook-safe mitigation for transient RPC flakiness — so the published report is reliably green. code_block keeps the rendered command clean. * fix(doctest): survive 'logoscore stop' group-SIGTERM (trap) + reload-recover wedged transport CI evidence: the teardown's -15 was the dominant remaining failure — 'logoscore stop' SIGTERMs its own process group, killing the step shell directly (|| true can't catch a signal), so guard the teardown with 'trap "" TERM'. token-list's refresh also wedged its transport persistently within a session; on RPC_FAILED it now reloads + re-configures the module before retrying. * feat: concurrency:"multi" — uniswap prices/quotes serve concurrently Every price/quote/swap method blocks on a Multicall3 eth_call through eth_rpc, so pricing several chains at once no longer serializes. Trait → &self + Send+Sync; config behind a RwLock (read it, clone the chain, drop the lock, then call). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(doctest): build a 0.2 logoscore so the multi uniswap's deferred reply resolves uniswap_module is now concurrency:"multi" — CLI calls return a pending sentinel the daemon must resolve. Override logoscore's protocol (+ liblogos's) to >= 0.2. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * chore: bump logos-module-builder → 7bcd2de (qt-sdk QThread multi fix) uniswap_module is concurrency:"multi" and calls eth_rpc_module from its worker. The merged logos-qt-sdk#6 (via module-builder#136) spawns the multi handler on a real QThread so that outbound module→module call's nested QEventLoops can drive the QtRO replica handshake — without it get_prices hung (METHOD_FAILED). Verified locally end-to-end: get_prices now returns the Multicall3-priced result ($3000). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>