Dusk gets awkward when Moonlight clears the first step and the second one dies on something that sounds fake until you hit it: still eligible, not provable.
A venue contract on DuskEVM takes a verifiable credential, checks the access boundary, commits the state transition. No fireworks. The desk reads it as “good, we’re inside the fence now.” That’s how these flows get drawn in tickets and specs. Gate open -> do the rest.

Except the “rest” is a new state.
Next call is touching a different state root. Different execution context. Same actor, sure, but the proof you just used was shaped for that first transition. Bound to that exact moment. Moonlight isn’t running a login session you can coast on. It’s binding authorization into execution.
So the second leg reaches for the same credential posture and… nothing. Not “revoked.” Not “expired.” Just wrong for this state.
Ops does what ops always does when a system refuses to give a clean error story.
“RPC glitch.” “Maybe the endpoint.” “Try a different provider.” Someone even says “contract bug” because it’s easier to blame code than admit the model is off by one step.
Meanwhile DuskDS keeps ratifying blocks. Finality keeps landing around you. The chain looks bored. The venue contract looks bored too. No congestion revert, no noisy failure, no helpful trace that says “you reused evidence that was never meant to be reused.”
That’s the punch in Dusk's Moonlight flows: non-replayability isn’t a policy slogan, it’s an execution property. The first proof did its job. It doesn’t get to do another one just because the business workflow wants continuity. If the second transition needs a fresh attestation bound to the current state, it needs it now. Not “same session.” Not “same wallet.” Now.

And the moment you accept that, the workflow looks different in hindsight.
You stop chaining steps like you’re dragging a badge through a hallway. You start treating every boundary crossing as its own state transition, with its own proof shape, its own credential scope, its own chance to stall in the most annoying way possible: everything healthy, nothing composable.
Eligibility isn’t the bottleneck on Dusk. Evidence is.
So you re-attest. Re-issue. Re-authorize. Step two becomes its own ceremony. If you don’t build for that, Dusk won’t “help” you by letting the second leg inherit comfort from the first. It’ll just sit there, finalizing the rest of the world, while your flow stays mid-route.
