Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
220 commits
Select commit Hold shift + click to select a range
c46ae07
Make alloy gas estimator configurable (#4081)
fafk Jan 26, 2026
22ba976
Improve handling of unverifiable quotes (#4085)
MartinquaXD Jan 26, 2026
adda1ae
Log solve request data transfer (#4082)
MartinquaXD Jan 26, 2026
5ca01e7
Replace RPC mempool API with in-memory tracking (#4086)
MartinquaXD Jan 26, 2026
7081b03
Optimize live orders queries based on confirmed_valid_to column (#4055)
m-sz Jan 26, 2026
a71f577
[TRIVIAL] Remove atty and move maplit to dev-dependencies (#4089)
jmg-duarte Jan 26, 2026
0188a29
Remove useless logs (#4084)
MartinquaXD Jan 26, 2026
5ba1e1e
Fetch inflight orders from DB (#4087)
MartinquaXD Jan 26, 2026
03cad15
Stop enforcing body size limit (#4092)
MartinquaXD Jan 27, 2026
de28ec1
Revert "Optimize live orders queries based on confirmed_valid_to colu…
m-sz Jan 27, 2026
8d6851c
Add no-op placeholder migrations for the numbering to be continuous (…
m-sz Jan 28, 2026
d2e2e2d
Rewrite migration V100 to be optional (#4098)
m-sz Jan 28, 2026
3fefcc0
Move order outside market log to callsites (#4090)
jmg-duarte Jan 28, 2026
ff38a3e
Add configurable database connection pool size (#4097)
jmg-duarte Jan 28, 2026
2507e91
Fix migrations introducing indexes on true_valid_to (#4095)
m-sz Jan 28, 2026
ff190ad
Migrate gas estimation to match alloy's type (#4054)
jmg-duarte Jan 29, 2026
0519c04
[TRIVIAL] Add Plasma to OpenApi (#4100)
squadgazzz Jan 29, 2026
0e65c61
Optimize order queries by using true_valid_to (#4104)
m-sz Jan 29, 2026
7fb5cc4
Fix haircut logic (#4093)
squadgazzz Jan 29, 2026
d63e52f
[TRIVIAL] Drop the db solver participation guard (#4099)
squadgazzz Jan 30, 2026
64cd00b
[TRIVIAL] Fix playground configs (#4108)
jmg-duarte Jan 30, 2026
8dd0fdd
Update playground frontend Dockerfile (#4103)
MarcusWentz Jan 30, 2026
00ae19d
Normalize ECDSA signature `v` parameter for Solidity `ecrecover` comp…
squadgazzz Feb 2, 2026
77bbbdf
Fix haircut mismatch between reported and on-chain amounts (#4109)
squadgazzz Feb 2, 2026
05d1996
Support fractional vol fee bips in orderbook (#4112)
fafk Feb 2, 2026
5690fc4
Improve autopilot maintenance (#4113)
MartinquaXD Feb 3, 2026
e68c266
Remove ethcontract+web3+primitive-types (#4106)
jmg-duarte Feb 3, 2026
3760d31
Trait‑Based Architecture for Refunder Service (#4051)
tilacog Feb 3, 2026
838fafe
Fix tini zombie reaping with shared process namespace (#4114)
ahhda Feb 3, 2026
e239bd3
[TRIVIAL] Fix vulnerability by bumping bytes crate version (#4121)
MartinquaXD Feb 3, 2026
be8ec55
[TRIVIAL] Fix verbose log (#4120)
MartinquaXD Feb 3, 2026
993e2d4
[TRIVIAL] Remove unused error (#4124)
jmg-duarte Feb 3, 2026
fe6e19a
[TRIVIAL] Rename Web3's DynProvider alloy -> provider (#4123)
jmg-duarte Feb 3, 2026
fde29a4
Log tracing spans in JSON logger (#4117)
MartinquaXD Feb 4, 2026
bc2788e
Initial Claude setup (#4122)
fafk Feb 5, 2026
86fe6a0
Don't notify solvers about failed solutions with a haircut fee (#4115)
squadgazzz Feb 5, 2026
04a3915
Optimize total_surplus query (#4116)
jmg-duarte Feb 5, 2026
f8087e5
Filter refunded ethflow orders from all solvable orders query (#4129)
MartinquaXD Feb 6, 2026
0474b7e
Upgrade `time` crate (#4130)
squadgazzz Feb 6, 2026
950180e
Tighter filter on all solvable orders query (#4131)
MartinquaXD Feb 6, 2026
2f144c6
Do not panic on failure to acquire connections to store events (#4132)
jmg-duarte Feb 6, 2026
a0b65c1
Normalize approximation native token decimals (#4125)
squadgazzz Feb 6, 2026
0512c46
Create composite index orders(owner, class, true_valid_to) (#4133)
jmg-duarte Feb 6, 2026
b854819
Update CLAUDE.md (#4128)
squadgazzz Feb 9, 2026
903bcd3
Mount flyway.conf in docker-compose.yaml (#4138)
MartinquaXD Feb 10, 2026
adf5fca
Fix flaky autopilot follower e2e test (#4139)
squadgazzz Feb 10, 2026
8a30f89
Optimize autopilot maintenance (#4141)
MartinquaXD Feb 11, 2026
2f704dc
[M2] Integrate block explorer URL override for Otterscan (#4077)
augustocollerone Feb 11, 2026
5db7fbb
Fix true_valid_to updating (#4134)
m-sz Feb 11, 2026
558b1bc
Shared native price cache (#4136)
squadgazzz Feb 11, 2026
d72d91d
Skip checks for defined appCodes (#4118)
fafk Feb 12, 2026
1c28e49
Migrate orderbook API from warp to axum (#4080)
jmg-duarte Feb 12, 2026
6bd3e6f
Propagate request ID from Forwarder (#4150)
fafk Feb 13, 2026
4e24338
Add openAPI reference to ink (#4111)
AryanGodara Feb 13, 2026
d28b2a0
Don't re-hash appdata every time (#4152)
MartinquaXD Feb 13, 2026
bf0f778
Move storing order events fully off the hot path (#4149)
MartinquaXD Feb 13, 2026
49d8b6e
Make autopilot sync more granular (#4144)
MartinquaXD Feb 13, 2026
eb99f99
Store orders and quotes reference counted in auction (#4153)
MartinquaXD Feb 13, 2026
9b50da5
Skip tx simulation on endpoints that don't mine reverts (#4143)
MartinquaXD Feb 13, 2026
0c04766
Remove price filtering from autopilot (#4148)
MartinquaXD Feb 13, 2026
80f1b69
Speed up removing old orders and quotes (#4151)
MartinquaXD Feb 13, 2026
d2d7e4f
Speed up auction metrics (#4155)
MartinquaXD Feb 13, 2026
95b5017
Remove unused config options / features (#4156)
MartinquaXD Feb 13, 2026
32b0408
Bound native price cache with moka (#4154)
squadgazzz Feb 13, 2026
5b7d56e
Simplify deny listed tokens (#4157)
MartinquaXD Feb 13, 2026
8e7c79f
Extract common utils, serialization to shared and serde-ext (#4142)
m-sz Feb 16, 2026
89bdca3
Add TOML configuration to the autopilot (#4147)
jmg-duarte Feb 17, 2026
52f7d7f
autopilot: send `/solve` requests with ref-counted body (#4159)
MartinquaXD Feb 17, 2026
8f3b76c
Only stream 1 `/solve` request body in driver (#4160)
MartinquaXD Feb 17, 2026
889bfce
Add more tracing spans (#4162)
MartinquaXD Feb 17, 2026
77bf188
[TRIVIAL] Fix granular autopilot sync (#4165)
MartinquaXD Feb 18, 2026
612246e
Upgrade axum 0.6 → 0.8 and related HTTP dependencies (#4164)
jmg-duarte Feb 18, 2026
65450c5
Orderbook native price estimators fallback (#4161)
squadgazzz Feb 18, 2026
1a29bbe
Fix limit layer in driver and bump limit to 20Mb (#4170)
jmg-duarte Feb 18, 2026
24a4709
Remove request body limit in the driver (#4171)
jmg-duarte Feb 18, 2026
55de111
[TRIVIAL] Bump alloy to 1.7.3 (#4168)
jmg-duarte Feb 18, 2026
4351d4c
[TRIVIAL] Bump opentelemetry->0.31 & tracing-opentelemetry->0.32.1 (#…
jmg-duarte Feb 18, 2026
4c2987a
Update old de/serialization errors (#4163)
jmg-duarte Feb 18, 2026
a61a42f
Fix tracing spans on solvers (#4173)
jmg-duarte Feb 18, 2026
0f5da58
Upgrade reqwest to 0.13 (#4172)
jmg-duarte Feb 18, 2026
0743608
[TRIVIAL] Remove direct dependency on derivative crate (#4174)
jmg-duarte Feb 18, 2026
ffb235b
Update Claude's victoria logs instructions (#4177)
fafk Feb 18, 2026
4ccda4c
Add extra label to distinguish requests with the same path (#4176)
jmg-duarte Feb 18, 2026
6eb0a0f
Make sure payload is correctly formatted (#4178)
fafk Feb 19, 2026
c1014b7
Bump sqlx to 0.8 and bigdecimal to 0.4 (#4175)
jmg-duarte Feb 19, 2026
871a312
autopilot: filter `&Order` instead of `Arc<Order>` (#4179)
MartinquaXD Feb 19, 2026
e6eedb7
Move fee policy configuration from CLI args to config file (#4158)
jmg-duarte Feb 19, 2026
ce5c667
Remove deny_unknown_fields for the new autopilot config (#4182)
jmg-duarte Feb 19, 2026
e461506
Revise pull request template format (#4183)
extrawurst Feb 19, 2026
270a007
Migrate trusted tokens to the config (#4189)
jmg-duarte Feb 20, 2026
a0266b8
Optimize uni v3 liquidity fetching (#4188)
MartinquaXD Feb 20, 2026
ce4e2a0
Compress S3 body in blocking task (#4185)
MartinquaXD Feb 20, 2026
a6d3976
Speedup event indexing (#4180)
MartinquaXD Feb 20, 2026
2ae17d2
Upgrade prometheus to 0.14 (#4193)
jmg-duarte Feb 23, 2026
a5111a1
Fix order of tokens to improve caching (#4197)
fafk Feb 23, 2026
d178974
Bulk insert order events query (#4184)
MartinquaXD Feb 23, 2026
8154b9d
Avoid unnecessary overhead from logging (#4191)
MartinquaXD Feb 23, 2026
3ec82fc
Migrate banned users, order events cleanup, and S3 config to config f…
jmg-duarte Feb 23, 2026
250f603
Serialize auction in blocking task (#4186)
MartinquaXD Feb 23, 2026
14d102e
Restructure observe crate (#4196)
MartinquaXD Feb 23, 2026
6a9cd2e
Remove backported header injector & extractor (#4200)
jmg-duarte Feb 23, 2026
1d3e3b8
Improve CoinGecko batching mechanism (#4202)
fafk Feb 24, 2026
38287ec
[TRIVIAL] Remove noisy tracing spans (#4203)
MartinquaXD Feb 24, 2026
7cf288e
Autopilot measure network transfer (#4204)
MartinquaXD Feb 24, 2026
c336771
Only check allowance of liquidity sources that are actually used (#4190)
MartinquaXD Feb 24, 2026
47ea629
Migrate autopilot native price estimation config from CLI args to con…
jmg-duarte Feb 25, 2026
e5dc1ea
[TRIVIAL] Change gzip level to 3 (#4209)
MartinquaXD Feb 25, 2026
6b242fd
Move orderbook configuration from CLI args to TOML config file (#4195)
jmg-duarte Feb 26, 2026
51a8fd0
[M3] docs(playground): add Using Otterscan user guide (#4146)
openjarvis2026 Feb 26, 2026
cb58b60
Add v1/orders POST endpoint to get orders in batches (#4048)
m-sz Feb 26, 2026
013b198
Migrate the playground config (#4214)
jmg-duarte Mar 2, 2026
74118ee
Compile only used packages in main Dockerfile (#4220)
jmg-duarte Mar 2, 2026
5cd893e
Replace full alloy import with specific alloy crates (#4219)
jmg-duarte Mar 2, 2026
8842809
Enhance error handling and reporting for app data deserialization (#4…
jmg-duarte Mar 2, 2026
213ae81
Optimize batching for CoinGecko (#4215)
fafk Mar 2, 2026
32fe75a
Compress `/solve` requests (#4212)
squadgazzz Mar 2, 2026
0684d7c
split off new crates from `shared` (#4223)
MartinquaXD Mar 3, 2026
b79d812
Allow multiple parallel settlements from one solver (#4167)
fafk Mar 4, 2026
209ddc4
Move price estimation into separate crate (#4225)
MartinquaXD Mar 4, 2026
a08b1a5
Migrate shared native price estimation config from CLI to config file…
jmg-duarte Mar 4, 2026
594a1af
Accept hex params with and without 0x prefix (#4228)
jmg-duarte Mar 4, 2026
1d4e32a
Add TOML formatting support (#4226)
jmg-duarte Mar 4, 2026
82d3e7c
Extract `signature-validator` and `zeroex-api` crates (#4224)
jmg-duarte Mar 4, 2026
c9db01a
Increase override amount (#4231)
fafk Mar 5, 2026
5131860
replace `alloy` dependencies with specific sub-dependencies (#4230)
MartinquaXD Mar 5, 2026
bbfa48f
Migrate the database shared configuration to a file (#4218)
jmg-duarte Mar 5, 2026
ae83cf7
reenable https support (#4238)
MartinquaXD Mar 6, 2026
fb96d59
Fix log instructions for claude (#4237)
fafk Mar 6, 2026
4b1a8f1
Dont rely on feature unification (#4240)
MartinquaXD Mar 6, 2026
540bc76
Extract autopilot config groups (ethflow, cow_amm, run_loop) to TOML …
jmg-duarte Mar 10, 2026
cd9c49b
Don't consider inflight orders invalid (#4241)
fafk Mar 10, 2026
f6afe62
Upgrade quinn-proto to 0.11.14 (#4245)
jmg-duarte Mar 10, 2026
1e76a49
Update trivy action (#4248)
jmg-duarte Mar 10, 2026
cfce4f9
Migrate OKX solver (#4236)
squadgazzz Mar 10, 2026
2fdd083
Debug endpoint (#4233)
fafk Mar 11, 2026
e287d6c
[TRIVIAL] Log order uids with encoding errors (#4250)
MartinquaXD Mar 11, 2026
10f71cb
Inline submission account config (#4242)
squadgazzz Mar 11, 2026
a1cb98b
Extract autopilot config to configs crate (#4246)
jmg-duarte Mar 11, 2026
b7643dd
BitGet solver (#4249)
squadgazzz Mar 11, 2026
41e27b5
Extract orderbook config to configs crate (#4247)
jmg-duarte Mar 11, 2026
f8ff3cb
Extract order_quoting, banned_users, http_client configs to configs c…
jmg-duarte Mar 11, 2026
64466d1
Fix Bitget API signature when using proxy endpoint (#4256)
squadgazzz Mar 12, 2026
73f1ecd
Store reasons why an order was removed from auction (#4251)
fafk Mar 12, 2026
911ae99
Move price-estimation config structs into configs (#4259)
m-sz Mar 12, 2026
5dc4b2a
[TRIVIAL] Update BitGet solver chain names (#4257)
squadgazzz Mar 12, 2026
a7a875a
Clean up solvers util (#4254)
squadgazzz Mar 12, 2026
275f5f3
Refactor http-client to separate crate (#4258)
m-sz Mar 12, 2026
e20bca0
Increase quote verification gas limit (#4261)
MartinquaXD Mar 13, 2026
c99b5d0
Use write DB for latency sensitive queries (#4262)
MartinquaXD Mar 13, 2026
96d9eb0
Allow full balance and allowance checking during order creation (#4229)
m-sz Mar 13, 2026
f59d9b4
Move common eth domain types to separate crate (#4260)
m-sz Mar 16, 2026
d9464bd
Extract price estimation config to configs crate (#4255)
jmg-duarte Mar 16, 2026
0441cea
Eth domain types driver (#4263)
m-sz Mar 16, 2026
01b3ede
Add custom solver errors (#4268)
fafk Mar 18, 2026
e2c2562
Remove lens from the servies (#4269)
AryanGodara Mar 18, 2026
d7fa1f9
Add knob to ensure gas floor for unverified quotes (#4276)
fafk Mar 19, 2026
3c96711
More efficient account trades query (#4273)
MartinquaXD Mar 19, 2026
c0da9fc
Configs to fix the playground (#4270)
jmg-duarte Mar 19, 2026
bfc4d08
Extract shared CLI arguments to config file-based SharedConfig (#4266)
jmg-duarte Mar 19, 2026
42b6778
Add knob to configure gas ceiling for unverified quotes (#4277)
fafk Mar 19, 2026
e6d3d0b
Simulator crate (#4265)
m-sz Mar 20, 2026
173321d
[TRIVIAL] Speed up analytics DB replication job (#4279)
MartinquaXD Mar 20, 2026
ffe4f5c
fix: Don't quote unsupported tokens (#4280)
fafk Mar 20, 2026
0d94cdf
Add serde tag to SimulatorKind (#4281)
m-sz Mar 20, 2026
10a6e60
Clamp gas value before declaring a winner (#4282)
MartinquaXD Mar 20, 2026
f476949
Fix cargo audit vulnerabilities (aws-lc-sys, rustls-webpki) (#4286)
squadgazzz Mar 23, 2026
eb71b52
Map Bitget API error codes to internal solver errors (#4285)
squadgazzz Mar 23, 2026
25a01e0
[EASY] Improve BitGet test (#4264)
squadgazzz Mar 23, 2026
38d8383
[EASY] Clean up remaining cargo audit advisories (#4287)
squadgazzz Mar 24, 2026
796b6e4
set docker image tag to git-sha aswell (#4289)
extrawurst Mar 24, 2026
2ed3e04
Map remaining Bitget error codes (80011-80015) (#4290)
squadgazzz Mar 24, 2026
f962723
Map OKX error code 51005 (honeypot token) to NotFound (#4293)
squadgazzz Mar 25, 2026
0a42e7c
Fix simulator using raw gas estimator without tip adjustments (#4298)
squadgazzz Mar 27, 2026
3dd0844
Remove Enso's simulator support (#4294)
jmg-duarte Mar 30, 2026
9adf10b
Add Claude Code GitHub Workflow (#4292)
squadgazzz Mar 31, 2026
d067d68
Log original request ID when reusing shared in-flight quote requests …
squadgazzz Mar 31, 2026
e1ae348
Allow solvers to set custom gas fees in their solution (#4299)
squadgazzz Mar 31, 2026
62f7d9b
Log custom solver errors on quoting (#4301)
jmg-duarte Mar 31, 2026
5b22ece
Simulation endpoint (#4275)
m-sz Apr 1, 2026
76446ea
Add block number to order simulation (#4305)
m-sz Apr 3, 2026
0c9026c
Update GH actions to use pinned commit SHA (#4312)
m-sz Apr 7, 2026
b10b826
Custom order simulation (#4304)
m-sz Apr 7, 2026
ab948dc
Skip balance check for flashloan orders (#4278)
felixjff Apr 7, 2026
7b16a3d
Partially filled orders support in simulation (#4306)
m-sz Apr 8, 2026
d6a912d
Add global query timeout to SELECT queries (#4272)
jmg-duarte Apr 8, 2026
2893987
Fix BalancerV2NoProtocolFeeLiquidityBootstrappingPoolFactory Sepolia …
jmg-duarte Apr 8, 2026
d293fd2
Advise Claude to use order debug endpoint (#4303)
fafk Apr 8, 2026
cfbec98
Refactor contracts crate out of the main folder for faster compilatio…
jmg-duarte Apr 8, 2026
0ea7a77
docs: add onboarding diagrams and entrypoints (#4311)
jmg-duarte Apr 9, 2026
1af5aa6
Add a timeout to balance override detection (#4317)
jmg-duarte Apr 9, 2026
1467ba0
Generate tendery link on simulation (#4320)
fafk Apr 9, 2026
befce9d
[TRIVIAL] Pin Claude workflow actions to full commit SHAs (#4323)
squadgazzz Apr 9, 2026
d0073a2
[TRIVIAL] Redact IPFS auth_token in debug (#4325)
jmg-duarte Apr 10, 2026
9281fe1
Surface transfer simulation revert reasons in order creation API (#4321)
squadgazzz Apr 10, 2026
0dd0349
Don't compile contract bindindgs we don't use (#4324)
MartinquaXD Apr 13, 2026
ab88398
Remove uniform clearing prices from winner selection (#4313)
jmg-duarte Apr 13, 2026
6cb520f
Update claude's log instructions (#4319)
fafk Apr 13, 2026
8789f93
Add E2E test to ensure flashloan filtering is performed correctly (#4…
jmg-duarte Apr 14, 2026
df3de51
Support reading TenderlyConfig api_key from environment variable (#4332)
squadgazzz Apr 14, 2026
689cce1
Hide competition until deadline passes (#4330)
fafk Apr 15, 2026
54fd012
Fix RUSTSEC issues (#4334)
fafk Apr 15, 2026
6cccc33
Bump alloy crates from 1.7.3 to 1.8.3 (#4333)
AryanGodara Apr 15, 2026
ea53cdc
Respect settle queue size (#4338)
fafk Apr 16, 2026
63bcb85
Use a common prefix for internal endpoints (#4339)
fafk Apr 16, 2026
17d9f10
Workflow to test contract generated code (#4336)
jmg-duarte Apr 16, 2026
3259720
Add internal solver competition endpoint (#4335)
fafk Apr 17, 2026
33a63b5
Add EIP-4626 native price estimator (#4243)
kaze-cow Apr 20, 2026
9d28f2a
[Driver] Add SettlementStarted solver notification (#4327)
kirsanium Apr 20, 2026
2c34db9
Correctly encode approval interactions for USDT-like tokens (#4354)
MartinquaXD Apr 21, 2026
2f337af
Use inline PR review comments from Claude code review (#4356)
squadgazzz Apr 22, 2026
3f80656
Bump rustls-webpki to 0.103.13 (RUSTSEC-2026-0104) (#4357)
squadgazzz Apr 22, 2026
8ce89a6
Support Aave v3 aToken balance overrides (#4345)
squadgazzz Apr 22, 2026
ebe8968
Include block number in logged Tenderly simulation command (#4359)
squadgazzz Apr 22, 2026
11bbbb7
Fix EIP-4626 contract revert classification (#4360)
jmg-duarte Apr 23, 2026
f58cbda
Add uni v3 defaults on gnosis chain (#4350)
MartinquaXD Apr 24, 2026
3cda241
Overshoot Spardose fake balance by 1% (#4362)
squadgazzz Apr 24, 2026
1ca6556
Propose multiple winning solutions in the driver (#4267)
fafk Apr 24, 2026
57cc1f7
Upgrade v2.359.0 (#10)
m-sz Apr 30, 2026
fb72f96
Fix Justfile repeat fmt-toml
m-sz Apr 30, 2026
77ef335
Remove leftover config dirs
m-sz Apr 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 0 additions & 8 deletions .cargo/audit.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,6 @@
[advisories]
# Known vulnerabilities that are tracked in https://github.com/cowprotocol/services/issues/3338
ignore = [
# idna - Punycode label vulnerability (RUSTSEC-2024-0421)
# Needs upgrade to 1.0.0+ (transitive dependency)
"RUSTSEC-2024-0421",

# protobuf - Uncontrolled recursion (RUSTSEC-2024-0437)
# Needs upgrade to 3.7.2+ (transitive dependency)
"RUSTSEC-2024-0437",

# rsa - Marvin Attack timing sidechannel (RUSTSEC-2023-0071)
# No patch available yet (cryptography vulnerability)
"RUSTSEC-2023-0071",
Expand Down
20 changes: 15 additions & 5 deletions .claude/commands/debug-order.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,21 @@ Read and follow the instructions in ./docs/COW_ORDER_DEBUG_SKILL.md to investiga

Key steps:
1. Parse the order UID and network from arguments (default: mainnet)
2. Fetch order data from API to get status and details
3. Check order_events in DB for lifecycle events
4. Search Victoria Logs for the order UID
2. **Start with the debug endpoint** — fetch the comprehensive debug report first:
```bash
source .env.claude && curl -s -H "X-API-Key: $COW_DEBUG_API_KEY" "https://partners.cow.fi/$NETWORK/restricted/api/v1/debug/order/$ORDER_UID" | jq .
```
This returns order details, lifecycle events, auction participation, proposed solutions, executions, trades, and settlement attempts — all in one call.
3. Analyze the debug report — key event meanings:
- `ready` = order made it into an auction (was sent to solvers)
- `considered` = a solver included this order in a solution but that solution didn't win
- `executing` = order is in the winning solution, being submitted on-chain
- `traded` = order was settled on-chain
- `filtered` / `invalid` = order was excluded (check the `reason` field)
4. Search Victoria Logs for additional context (filter reasons, error details, solver logs)
- For finding discarded solutions where the order UID appears in calldata, use regex: `.*ORDER_UID_WITHOUT_0X.*` plus `discarded`
5. Identify root cause and report findings with evidence
6. If you haven't found anything go wild and try all SQL / log searches / codebase searches you can think of
5. Use DB queries or API calls only if the debug report is missing info or you need deeper investigation
6. Identify root cause and report findings with evidence
7. If you haven't found anything go wild and try all SQL / log searches / codebase searches you can think of

Always show your evidence (log lines, DB results, API responses) when presenting findings.
31 changes: 31 additions & 0 deletions .github/workflows/claude-code-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Claude Code Review

on:
pull_request:
types: [ready_for_review]

jobs:
claude-review:
if: ${{ !github.event.pull_request.draft }}
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
issues: read
id-token: write

steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1

- name: Run Claude Code Review
id: claude-review
uses: anthropics/claude-code-action@e0f2d99545298b87c2f984ab534af3a6534142ae # v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
plugins: 'code-review@claude-code-plugins'
prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }} --comment'

50 changes: 50 additions & 0 deletions .github/workflows/claude.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Claude Code

on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]

jobs:
claude:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
actions: read # Required for Claude to read CI results on PRs
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1

- name: Run Claude Code
id: claude
uses: anthropics/claude-code-action@e0f2d99545298b87c2f984ab534af3a6534142ae # v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

# This is an optional setting that allows Claude to read CI results on PRs
additional_permissions: |
actions: read

# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
# prompt: 'Update the pull request description to include a summary of changes.'

# Optional: Add claude_args to customize behavior and configuration
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://code.claude.com/docs/en/cli-reference for available options
# claude_args: '--allowed-tools Bash(gh pr:*)'

56 changes: 43 additions & 13 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ User signs order → Orderbook validates → Autopilot includes in auction
- Spot format: `cargo +nightly fmt -- <path>` (never call stable `cargo fmt`)
- Lint: `cargo clippy --locked --workspace --all-features --all-targets -- -D warnings`
- Check format: `cargo +nightly fmt --all -- --check`
- Only format **after** as a final step! — i.e. after checking compilation, running tests, etc.

### Local Development Environment
- Start local PostgreSQL: `docker compose up -d`
Expand Down Expand Up @@ -181,26 +182,55 @@ Databases: `mainnet`, `arbitrum-one`, `base`, `linea`, `polygon`, `xdai`, `sepol

Use `$ETH_MAINNET_RPC` from `.env.claude` for mainnet. Use `cast` or whatever tools you want freely.

## Grafana Logs Access
## Victoria Logs Access

Use the `scripts/vlogs` wrapper to query Victoria Logs.
Use the `CoW-Prod` MCP tools to query Victoria Logs directly.

**IMPORTANT**: When running `scripts/vlogs`, do NOT use bash comments before the command (e.g., `# comment\nscripts/vlogs ...`) as this causes unnecessary permission prompts. Just run the command directly.
**Timestamps**: MCP requires RFC3339 format (e.g., `2026-04-09T00:00:00Z`). Compute absolute timestamps from the current date rather than using relative time.

**IMPORTANT**: Order UIDs and other structured fields (like `quote_id`, `auction_id`) live inside the `all` field in Victoria Logs. You MUST prefix them with `all:` to match. Plain text terms (like `order created`, `filtered`) match the log message directly and don't need the prefix.
**IMPORTANT**: Order UIDs and other structured fields (like `quote_id`, `auction_id`) live inside the `all` field in Victoria Logs. You MUST prefix them with `all:` to match. Plain text terms (like `order created`, `filtered`) match the log message directly and don't need the prefix. You can also use parsed fields directly (e.g., `parsed.fields.order_uid:0x...`) for more precise matching.

```bash
scripts/vlogs "<expr>" [--from <time>] [--to <time>] [--max <lines>] [--env <prod|staging>] [--raw]
**IMPORTANT — Protect context window**: Raw log entries contain ~4KB of kubernetes/ec2 metadata each. **Always** append `| fields _time, _msg, all` (or specific `parsed.fields.*`) to strip noise. Use small `limit` values (10-20) and only increase if needed. Examples:
- General order search: `... | fields _time, _msg, all`
- When you only need specific parsed fields: `... | fields _time, _msg, parsed.fields.err, parsed.fields.driver, parsed.spans.auction.auction_id`

scripts/vlogs "NOT container:controller order created all:0xabc..." --from now-24h
scripts/vlogs "NOT container:controller network:mainnet settlement failed" --from now-6h --max 50
scripts/vlogs "error" --env staging --from now-1h
scripts/vlogs "NOT container:controller all:0xabc..." --raw
```
**Available MCP tools:**
- `victorialogs_query` — Main log search (LogsQL expression + time range + limit)
- `victorialogs_hits` — Count matching logs grouped by time buckets
- `victorialogs_field_names` / `victorialogs_field_values` — Explore available fields
- `victorialogs_facets` — Most frequent values per field
- `victorialogs_stats_query` / `victorialogs_stats_query_range` — Aggregation queries
- `victorialogs_stream_field_names` / `victorialogs_stream_field_values` — Stream metadata

Defaults: `--from now-12h`, `--to now`, `--max 100`, `--env prod`
**Key fields:**
- Stream fields (efficient filters): `container`, `namespace`, `pod`
- `network` — chain name (mainnet, arbitrum-one, base, etc.)
- `all` — full structured JSON log (search with `all:` prefix for UIDs)
- `parsed.fields.*` — individual parsed fields (e.g., `parsed.fields.order_uid`, `parsed.fields.quote_id`)
- `_msg` — the log message text

Datasource UIDs (hardcoded in script): `vm-auth-prod` (production), `vm-auth-staging` (staging)
**Example queries:**
```
# Search for order logs (exclude nginx controller, strip metadata)
query: "container:!controller AND network:mainnet AND all:0xabc... | fields _time, _msg, all"
start: "<COMPUTED_RFC3339>"
limit: 20

# Search for order creation on mainnet
query: "container:!controller AND network:mainnet AND \"order created\" AND all:0xabc... | fields _time, _msg, all"
start: "<COMPUTED_RFC3339>"
limit: 10

# Settlement failures with just error details
query: "container:!controller AND network:mainnet AND \"settlement failed\" | fields _time, _msg, parsed.fields.err, parsed.fields.driver, parsed.spans.auction.auction_id"
start: "<COMPUTED_RFC3339>"
limit: 10

# Sort results by time
query: "container:!controller AND network:mainnet AND all:0xabc... | fields _time, _msg, all | sort by (_time) asc"
start: "<COMPUTED_RFC3339>"
limit: 20
```

## Etherscan API (V2)

Expand Down
Loading
Loading