A PERMIT2_TRANSFER_FROM that runs before a PERMIT2_PERMIT of the same token moves it under whatever allowance the router already had, so it can move more than the permit's amount. The permit's amount still stood as the Amount figure, which could then read lower than what leaves the wallet. decode() now counts such a transfer, into the router or anywhere else, among the steps before the permit that took its token, so the permit no longer stands: the Amount line gives the total the steps take, as with no permit, and the permit gets its own lines. A transfer after the permit, or of another token before it, still lets it stand; tests cover both. README Transaction Decoding states the condition. Model: opus-5-5