feat(autopilot-svm) PR08: Solana seam implementations and a single auction cycle - #4750
Conversation
|
@claude , review, please |
|
Claude finished @squadgazzz's task in 4m 35s —— View job ReviewSolid, well-documented PR — the seam implementations map cleanly onto the generic loop's traits, the code comments carry the rationale, and the deliberate stubs (native 1:1 pricing, log-only observer, const deadlines, process-local auction ids) are all called out in code and in the description. Nice touches: the Three points raised inline, none blocking:
Also observed (no change requested): |
|
Claude finished @squadgazzz's task in 4m 21s —— View job Re-review
All three points from my earlier review are now resolved on this branch:
I re-verified the trickier seams and they hold up:
No new blocking issues found — nothing I'd hold the PR on, so no inline comments this round. One minor, non-blocking note for awareness (no change needed for the demo): the enforced timeout in Nice work on the follow-ups. |
8f29d7e to
5c1b874
Compare
Description
The chain-generic loop from #4709 gets its Solana implementations, and the whole thing runs one real cycle end to end: wake on a new slot, cut the auction from the indexer-written tables, fan it out to the drivers, rank with the generic arbitrator (
winner-selectioninstantiated withchain_types::Solana, max_winners = 1), and dispatch/settleto the winner's driver.Two deviations from the Linear issue text worth noting here explicitly:
cow-solana-rpc, which gains its first helper,slot()), not asolana_new_orderNOTIFY. On a 400ms-slot chain the next tip wake is at most half a second away, so an order notify buys nothing, and the auction dedupe already suppresses no-change cycles.Known demo-scope stubs, each marked in code: the observer only logs (no competition tables exist), auction ids are process-local unix seconds (no auctions table), solve/submission deadlines are consts until the config PR, and the tip observed after ranking equals the cut tip (the trigger only polls inside
next_cycle), which stays inert while the submission deadline is only logged.Changes
domain/cycle.rsbinds the loop vocabulary: tip = slot, uid = intent hash, plus driver attribution that survives ranking ((solver, solution id)back to the driver index)domain/arbitrator.rsruns the generic fair-combinatorial arbitrator, marking auction orders via empty fee-policy entriesinfra/trigger.rspolls the slot and wakes the loop once per new oneinfra/provider.rscuts auctions fromsolana.orders(the freshness check against the indexer watermark waits for BE-203, today the watermark stalls between settlements and would false-alarm)infra/competition.rsfans/solveout to all drivers and joins wire solutions against the auction for limits and sidesinfra/executor.rsdispatches/settleto each winner's driver, detached(solver, solution id)pairs are dropped before ranking, a collision would misdispatch the settlementHow to test
New DB-backed mock-cycle test (the BE-184 checkpoint): a seeded open order, a canned axum driver, one
run_cycle, and the/settlerequest asserted, plus stage asserts that localize a failure to cut, solve, or ranking.