MCS-REB-1
Rebalancing — PancakeSwap V3
MCS v1.0.0, tolerance revision 1. Generated from the same constants the harness enforces. All four tests · Run this against your own endpoint
What is checked, and to what tolerance
| Field | Bound | What it means |
|---|---|---|
| currentTick | ±0 ticks | Reported current tick must equal the pool tick at the pinned block, exactly. |
| proposedTickSpacing | boolean | Every proposed tick must be an exact multiple of the pool’s tickSpacing. |
| policyRange | ±1 tick spacings | Proposed bounds must match the range implied by the policy SUPPLIED IN THE TEST CASE, within one tick spacing. |
| amounts | ±0.5 % | Proposed token amounts must satisfy the V3 liquidity formula within this tolerance. |
| inRange | boolean | The in-range boolean must match the chain. |
| distanceToBound | ±0.5 percentage points | Distance to the nearest bound, in price terms. |
| slippageBound | boolean | A slippage bound must be stated, as a positive number. |
Every bound carries a reason, not just a number. A tolerance nobody can justify is a tolerance that will be widened the first time it is inconvenient.
- currentTickThe tick is a single integer read from slot0 at a fixed block. There is no ambiguity and therefore no tolerance.
- proposedTickSpacingThe pool contract reverts on a tick that is not a multiple of its spacing, so a plan that violates this is not merely suboptimal, it is unexecutable. This is the single highest-signal check in the set and the most common failure in naive agents.
- policyRangeThere is no objectively correct V3 range in the abstract, so the case supplies the policy and we check compliance with it. One spacing of slack is the minimum the pool’s own granularity permits: the ideal tick is rarely itself a valid multiple.
- amountsThe formula is exact, but agents legitimately round for slippage and gas. 0.5% admits sane rounding while rejecting an agent that has not actually run the maths.
- inRangeDerived from tickLower <= tick < tickUpper. One right answer.
- distanceToBoundDerived arithmetic from the tick and the two bounds. The half-point band absorbs differences in rounding convention, not differences in method.
- slippageBoundAn execution plan with no slippage bound is unsafe to sign regardless of how good its range is. We check only that a bound is stated, never whether the chosen value was wise — that is a Ledger question.
The ground-truth method
The expected values are computed by us from chain state at a pinned block, never taken from a third party. A case is captured immediately before a run because BSC keeps roughly 64 blocks of state — about 29 seconds — so a case captured earlier could not be read by the agent under test or by us.
- REB-1-btcb-usdc-2500subject {"owner":"0x2e07E0145C0CFdF6D200B0aFAeD36953ef00d0cD","tokenId":"7321916","pair":"BTCB/USDC"} · policy {"rangePct":6,"feeTier":2500,"statement":"re-centre the position symmetrically at ±6% around the current spot price, on the 0.25% fee tier, keeping the same liquidity"}
What this test refuses to grade
- Whether the chosen range is the wisest availableThere is no objectively correct V3 range in the abstract. The test case supplies a policy and we check compliance with it; the quality of the policy is a Ledger question.
A standard is defined as much by what it refuses to grade as by what it grades. Every one of these is a judgement question and belongs in the Ledger, against a rubric registered before anyone has seen an answer.
Results, including the failures
TESTED1 pass, 99 fail, across 100 recorded runs. Failures are listed first because they are the more useful half.
| Agent | Verdict | Failed on | Block | Latency | When |
|---|---|---|---|---|---|
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:127417 | no answer | http 405 | 120649424 | 560 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:46573 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120649424 | 679 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:116170 | no answer | http 405 | 120649424 | 736 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:135131 | no answer | http 405 | 120649424 | 1851 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:2115 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120649424 | 896 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:268954 | no answer | http 405 | 120649424 | 225 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:6441 | no answer | http 405 | 120649424 | 594 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:331625 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120649424 | 494 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:258641 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120649424 | 557 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:43970 | no answer | http 406 | 120649424 | 371 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:114376 | no answer | http 405 | 120649424 | 346 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:126728 | no answer | http 405 | 120649424 | 375 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:49637 | no answer | http 405 | 120649424 | 705 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:6441 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120649424 | 93 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:133214 | no answer | response was not JSON | 120649424 | 2050 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:126728 | no answer | http 404 | 120649424 | 619 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:251399 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120649424 | 297 ms | 2026-09-08 09:53 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:212221 | no answer | response was not JSON | 120649424 | 1184 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:320164 | no answer | response was not JSON | 120649424 | 7558 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:96231 | no answer | http 500 | 120649424 | 128 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:43129 | no answer | response was not JSON | 120649424 | 339 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:293902 | no answer | http 404 | 120649424 | 329 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:84080 | no answer | http 405 | 120649424 | 137 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:135051 | no answer | http 422 | 120649424 | 142 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:91852 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120649424 | 177 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:137 | no answer | response was not JSON | 120649424 | 654 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:43129 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120649424 | 59 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:172459 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120649424 | 102 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:213332 | no answer | http 404 | 120649424 | 497 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:213036 | no answer | http 404 | 120649424 | 460 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:212943 | no answer | http 404 | 120649424 | 588 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:213378 | no answer | http 404 | 120649424 | 477 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:213432 | no answer | http 404 | 120649424 | 643 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:213053 | no answer | http 404 | 120649424 | 590 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:212769 | no answer | http 404 | 120649424 | 506 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:212840 | no answer | http 404 | 120649424 | 438 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:212989 | no answer | http 404 | 120649424 | 489 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:213084 | no answer | http 404 | 120649424 | 658 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:208760 | no answer | http 405 | 120649424 | 348 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:204789 | no answer | http 404 | 120649424 | 543 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:211586 | no answer | http 404 | 120649424 | 531 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:198999 | no answer | http 404 | 120649424 | 757 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:134865 | no answer | response was not JSON | 120649424 | 387 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:49467 | no answer | http 405 | 120649424 | 125 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:36035 | no answer | http 405 | 120649424 | 219 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:265876 | no answer | response was not JSON | 120649424 | 1023 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:265375 | no answer | http 405 | 120649424 | 999 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:266933 | no answer | http 405 | 120649424 | 1021 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:269233 | no answer | http 405 | 120649424 | 1029 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:303779 | no answer | http 405 | 120649424 | 548 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:259573 | no answer | http 405 | 120649424 | 188 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:41499 | no answer | http 405 | 120649424 | 150 ms | 2026-09-08 09:52 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:2115 | no answer | http 405 | 120649424 | 750 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:268954 | no answer | http 404 | 120649424 | 272 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:331750 | no answer | http 405 | 120649424 | 358 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:705 | no answer | http 405 | 120649424 | 95 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:116170 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120649424 | 631 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:135126 | no answer | response was not JSON | 120649424 | 641 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:129808 | no answer | http 404 | 120649424 | 170 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:49637 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120649424 | 1016 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:153533 | no answer | http 404 | 120649424 | 242 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:44942 | no answer | http 405 | 120649424 | 920 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:268285 | no answer | http 405 | 120649424 | 292 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:113284 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120649424 | 237 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:269223 | no answer | http 404 | 120649424 | 319 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:268285 | no answer | http 404 | 120649424 | 289 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:49467 | no answer | http 402 | 120649424 | 226 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:287226 | no answer | http 404 | 120649424 | 251 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:7612 | no answer | http 405 | 120649424 | 56 ms | 2026-09-08 09:51 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:127417 | no answer | http 405 | 120573967 | 539 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:46573 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120573967 | 790 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:116170 | no answer | http 405 | 120573967 | 515 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:135131 | no answer | http 405 | 120573967 | 1296 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:2115 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120573967 | 1268 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:268954 | no answer | http 405 | 120573967 | 362 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:6441 | no answer | http 405 | 120573967 | 349 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:331625 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120573967 | 720 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:258641 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120573967 | 225 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:43970 | no answer | http 406 | 120573967 | 359 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:159839 | no answer | http 405 | 120573967 | 219 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:126728 | no answer | http 405 | 120573967 | 359 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:49637 | no answer | http 405 | 120573967 | 938 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:6441 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120573967 | 92 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:133214 | no answer | response was not JSON | 120573967 | 1054 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:126728 | no answer | http 404 | 120573967 | 534 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:251399 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120573967 | 224 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:212221 | no answer | response was not JSON | 120573967 | 1416 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:320164 | no answer | response was not JSON | 120573967 | 458 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:96231 | no answer | http 500 | 120573967 | 251 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:43129 | no answer | response was not JSON | 120573967 | 1229 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:293902 | no answer | http 404 | 120573967 | 307 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:84080 | no answer | http 405 | 120573967 | 137 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:135051 | no answer | http 422 | 120573967 | 184 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:91852 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120573967 | 194 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:137 | no answer | response was not JSON | 120573967 | 579 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:43129 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120573967 | 86 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:172459 | fail | currentTick, inRange, distanceToBound, proposedTickSpacing, amounts, slippageBound | 120573967 | 139 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:213332 | no answer | http 404 | 120573967 | 386 ms | 2026-09-08 00:26 |
| 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:213036 | no answer | http 404 | 120573967 | 552 ms | 2026-09-08 00:26 |
| marque:bound | pass | — | 120574208 | 2941 ms | 2026-09-08 00:27 |
Failing to answer and answering wrongly are different facts and are shown as such. Test stubs are excluded from this list.