@@ -239,6 +239,49 @@ describe("Unit: SuperbridgeAdapter split delivery", function () {
239239 expect ( await strategy . callCount ( ) ) . to . equal ( 1 ) ;
240240 } ) ;
241241
242+ it ( "stored message honours a pause/revoke issued after it was stored (incident response)" , async ( ) => {
243+ const amount = ethers . utils . parseUnits ( "250" , 6 ) ;
244+ const data = wrapEnvelope ( strategy . address , amount , packPayload ( "pending" ) ) ;
245+ const sRouter = await impersonateAndFund ( await receiver . ccipRouter ( ) ) ;
246+
247+ // Message stored while the lane is healthy (token leg not yet landed).
248+ await receiver
249+ . connect ( sRouter )
250+ . ccipReceive (
251+ buildAny2EvmMessage ( { data, transportSender : receiver . address } )
252+ ) ;
253+ expect ( await receiver . hasPendingMessage ( strategy . address ) ) . to . equal ( true ) ;
254+
255+ // Canonical-bridge ETH lands and `receive()` wraps it to WETH.
256+ await deliverBridgeEth ( amount ) ;
257+
258+ // Incident: governance pauses the lane. Deferred delivery must be blocked too, not just
259+ // the atomic ccipReceive path.
260+ await receiver . connect ( governor ) . pauseLane ( strategy . address ) ;
261+ await expect (
262+ receiver . processStoredMessage ( strategy . address )
263+ ) . to . be . revertedWith ( "Super: lane paused" ) ;
264+
265+ // Revoke leaves `paused` untouched, so this exercises the `authorised` check.
266+ await receiver . connect ( governor ) . unpauseLane ( strategy . address ) ;
267+ await receiver . connect ( governor ) . revoke ( strategy . address ) ;
268+ await expect (
269+ receiver . processStoredMessage ( strategy . address )
270+ ) . to . be . revertedWith ( "Super: not authorised" ) ;
271+
272+ // The message + its WETH were held, not lost: re-authorise + unpause and delivery resumes.
273+ await receiver . connect ( governor ) . authorise ( strategy . address , {
274+ paused : false ,
275+ chainSelector : PEER_CHAIN ,
276+ destGasLimit : DEST_GAS_LIMIT ,
277+ } ) ;
278+ await receiver . processStoredMessage ( strategy . address ) ;
279+ expect ( await receiver . hasPendingMessage ( strategy . address ) ) . to . equal ( false ) ;
280+ expect ( await strategy . callCount ( ) ) . to . equal ( 1 ) ;
281+ expect ( await strategy . lastAmount ( ) ) . to . equal ( amount ) ;
282+ expect ( await wethMock . balanceOf ( strategy . address ) ) . to . equal ( amount ) ;
283+ } ) ;
284+
242285 it ( "multi-tenant: one adapter routes messages to distinct targets by envelope sender" , async ( ) => {
243286 const cfg = {
244287 paused : false ,
0 commit comments