diff --git a/lib/shared/dm-ops/process-dm-ops.js b/lib/shared/dm-ops/process-dm-ops.js
--- a/lib/shared/dm-ops/process-dm-ops.js
+++ b/lib/shared/dm-ops/process-dm-ops.js
@@ -20,6 +20,7 @@
   usePeerToPeerCommunication,
   type ProcessOutboundP2PMessagesResult,
 } from '../../tunnelbroker/peer-to-peer-context.js';
+import { useConfirmPeerToPeerMessage } from '../../tunnelbroker/use-confirm-peer-to-peer-message.js';
 import {
   processDMOpsActionType,
   queueDMOpsActionType,
@@ -39,6 +40,7 @@
   const dispatchWithMetadata = useDispatchWithMetadata();
   const processBlobHolders = useProcessBlobHolders();
   const createMessagesToPeersFromDMOp = useCreateMessagesToPeersFromDMOp();
+  const confirmPeerToPeerMessage = useConfirmPeerToPeerMessage();
 
   const dispatch = useDispatch();
 
@@ -121,6 +123,7 @@
 
       if (!dmOpSpecs[dmOp.type].operationValidator.is(dmOp)) {
         console.log(`Ignoring ${dmOp.type} operation because it is invalid`);
+        await confirmPeerToPeerMessage(dispatchMetadata);
         return;
       }
 
@@ -131,6 +134,7 @@
 
       if (!processingCheckResult.isProcessingPossible) {
         if (processingCheckResult.reason.type === 'invalid') {
+          await confirmPeerToPeerMessage(dispatchMetadata);
           return;
         }
         let condition;
@@ -167,6 +171,7 @@
           },
           dispatchMetadata,
         );
+        await confirmPeerToPeerMessage(dispatchMetadata);
         return;
       }
 
@@ -236,6 +241,7 @@
       dispatchWithMetadata,
       createMessagesToPeersFromDMOp,
       dispatch,
+      confirmPeerToPeerMessage,
     ],
   );
 }