diff --git a/dist/log_data.py b/dist/log_data.py
index 612a8e3ea6..828b4270d4 100644
--- a/dist/log_data.py
+++ b/dist/log_data.py
@@ -68,7 +68,8 @@ optypes = [
     LogOperationType('col_remove', 'column remove',
         [('uint32_id', 'fileid'), ('recno', 'recno')]),
     LogOperationType('col_truncate', 'column truncate',
-        [('uint32_id', 'fileid'), ('recno', 'start'), ('recno', 'stop')]),
+        [('uint32_id', 'fileid'), ('recno', 'start'), ('recno', 'stop'),
+        ('recno', 'dbg_start'), ('recno', 'dbg_stop')]),
     LogOperationType('row_modify', 'row modify',
         [('uint32_id', 'fileid'), ('item', 'key'), ('item', 'value')]),
     LogOperationType('row_put', 'row put',
@@ -77,6 +78,7 @@ optypes = [
         [('uint32_id', 'fileid'), ('item', 'key')]),
     LogOperationType('row_truncate', 'row truncate',
         [('uint32_id', 'fileid'), ('item', 'start'), ('item', 'stop'),
+        ('item', 'dbg_start'), ('item', 'dbg_stop'), 
             ('uint32', 'mode')]),
 
 # system operations
diff --git a/src/btree/bt_cursor.c b/src/btree/bt_cursor.c
index 82c506757f..9b3b6bd557 100644
--- a/src/btree/bt_cursor.c
+++ b/src/btree/bt_cursor.c
@@ -2212,7 +2212,8 @@ __wt_btcur_range_truncate(WT_CURSOR_BTREE *start, WT_CURSOR_BTREE *stop, WT_ITEM
      * disabling writing of the in-memory remove records to disk.
      */
     if (logging)
-        WT_RET(__wt_txn_truncate_log(session, orig_start_key, orig_stop_key, local_start));
+        WT_RET(
+          __wt_txn_truncate_log(session, orig_start_key, orig_stop_key, start, stop, local_start));
 
     switch (btree->type) {
     case BTREE_COL_FIX:
diff --git a/src/include/extern.h b/src/include/extern.h
index e2fcffd758..b54d4ad0cb 100644
--- a/src/include/extern.h
+++ b/src/include/extern.h
@@ -965,12 +965,13 @@ extern int __wt_logop_col_remove_unpack(WT_SESSION_IMPL *session, const uint8_t
   const uint8_t *end, uint32_t *fileidp, uint64_t *recnop)
   WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
 extern int __wt_logop_col_truncate_pack(WT_SESSION_IMPL *session, WT_ITEM *logrec, uint32_t fileid,
-  uint64_t start, uint64_t stop) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
+  uint64_t start, uint64_t stop, uint64_t dbg_start, uint64_t dbg_stop)
+  WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
 extern int __wt_logop_col_truncate_print(WT_SESSION_IMPL *session, const uint8_t **pp,
   const uint8_t *end, WT_TXN_PRINTLOG_ARGS *args) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
 extern int __wt_logop_col_truncate_unpack(WT_SESSION_IMPL *session, const uint8_t **pp,
-  const uint8_t *end, uint32_t *fileidp, uint64_t *startp, uint64_t *stopp)
-  WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
+  const uint8_t *end, uint32_t *fileidp, uint64_t *startp, uint64_t *stopp, uint64_t *dbg_startp,
+  uint64_t *dbg_stopp) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
 extern int __wt_logop_prev_lsn_pack(WT_SESSION_IMPL *session, WT_ITEM *logrec, WT_LSN *prev_lsn)
   WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
 extern int __wt_logop_prev_lsn_print(WT_SESSION_IMPL *session, const uint8_t **pp,
@@ -1001,12 +1002,13 @@ extern int __wt_logop_row_remove_unpack(WT_SESSION_IMPL *session, const uint8_t
   const uint8_t *end, uint32_t *fileidp, WT_ITEM *keyp)
   WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
 extern int __wt_logop_row_truncate_pack(WT_SESSION_IMPL *session, WT_ITEM *logrec, uint32_t fileid,
-  WT_ITEM *start, WT_ITEM *stop, uint32_t mode) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
+  WT_ITEM *start, WT_ITEM *stop, WT_ITEM *dbg_start, WT_ITEM *dbg_stop, uint32_t mode)
+  WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
 extern int __wt_logop_row_truncate_print(WT_SESSION_IMPL *session, const uint8_t **pp,
   const uint8_t *end, WT_TXN_PRINTLOG_ARGS *args) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
 extern int __wt_logop_row_truncate_unpack(WT_SESSION_IMPL *session, const uint8_t **pp,
-  const uint8_t *end, uint32_t *fileidp, WT_ITEM *startp, WT_ITEM *stopp, uint32_t *modep)
-  WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
+  const uint8_t *end, uint32_t *fileidp, WT_ITEM *startp, WT_ITEM *stopp, WT_ITEM *dbg_startp,
+  WT_ITEM *dbg_stopp, uint32_t *modep) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
 extern int __wt_logop_txn_timestamp_pack(WT_SESSION_IMPL *session, WT_ITEM *logrec,
   uint64_t time_sec, uint64_t time_nsec, uint64_t commit_ts, uint64_t durable_ts,
   uint64_t first_commit_ts, uint64_t prepare_ts, uint64_t read_ts)
@@ -1682,7 +1684,8 @@ extern int __wt_txn_set_timestamp(WT_SESSION_IMPL *session, const char *cfg[], b
 extern int __wt_txn_set_timestamp_uint(WT_SESSION_IMPL *session, WT_TS_TXN_TYPE which,
   wt_timestamp_t ts) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
 extern int __wt_txn_truncate_log(WT_SESSION_IMPL *session, WT_ITEM *orig_start_key,
-  WT_ITEM *orig_stop_key, bool local_start) WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
+  WT_ITEM *orig_stop_key, WT_CURSOR_BTREE *start, WT_CURSOR_BTREE *stop, bool local_start)
+  WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
 extern int __wt_txn_ts_log(WT_SESSION_IMPL *session)
   WT_GCC_FUNC_DECL_ATTRIBUTE((warn_unused_result));
 extern int __wt_txn_update_oldest(WT_SESSION_IMPL *session, uint32_t flags)
diff --git a/src/include/session.h b/src/include/session.h
index 82de1a05f4..7ec62afc9d 100644
--- a/src/include/session.h
+++ b/src/include/session.h
@@ -65,6 +65,8 @@ struct __wt_session_impl {
 
     void (*format_private)(int, void *); /* Format test program private callback. */
     void *format_private_arg;
+    uint32_t format_val;
+    uint32_t trunc_val;
 
     u_int active; /* Non-zero if the session is in-use */
 
@@ -226,6 +228,7 @@ struct __wt_session_impl {
 #define WT_SESSION_RESOLVING_TXN 0x10000u
 #define WT_SESSION_ROLLBACK_TO_STABLE 0x20000u
 #define WT_SESSION_SCHEMA_TXN 0x40000u
+#define WT_SESSION_TRUNC_DBG 0x80000u
     /* AUTOMATIC FLAG VALUE GENERATION STOP 32 */
     uint32_t flags;
 
diff --git a/src/include/txn.h b/src/include/txn.h
index d1ede81e21..958139a274 100644
--- a/src/include/txn.h
+++ b/src/include/txn.h
@@ -228,10 +228,12 @@ struct __wt_txn_op {
         /* WT_TXN_OP_TRUNCATE_COL */
         struct {
             uint64_t start, stop;
+            uint64_t dbg_start, dbg_stop;
         } truncate_col;
         /* WT_TXN_OP_TRUNCATE_ROW */
         struct {
             WT_ITEM start, stop;
+            WT_ITEM dbg_start, dbg_stop;
             WT_TXN_TRUNC_MODE mode;
         } truncate_row;
     } u;
diff --git a/src/include/txn_inline.h b/src/include/txn_inline.h
index f6a75c9c78..6fa018663b 100644
--- a/src/include/txn_inline.h
+++ b/src/include/txn_inline.h
@@ -1214,6 +1214,7 @@ __wt_txn_begin(WT_SESSION_IMPL *session, const char *cfg[])
     }
 
     F_SET(txn, WT_TXN_RUNNING);
+    session->format_val = session->trunc_val = 0;
     if (F_ISSET(S2C(session), WT_CONN_READONLY))
         F_SET(txn, WT_TXN_READONLY);
 
diff --git a/src/log/log_auto.c b/src/log/log_auto.c
index cdf140aec5..f578862fe3 100644
--- a/src/log/log_auto.c
+++ b/src/log/log_auto.c
@@ -269,21 +269,22 @@ __wt_logop_col_remove_print(
 }
 
 int
-__wt_logop_col_truncate_pack(
-  WT_SESSION_IMPL *session, WT_ITEM *logrec, uint32_t fileid, uint64_t start, uint64_t stop)
+__wt_logop_col_truncate_pack(WT_SESSION_IMPL *session, WT_ITEM *logrec, uint32_t fileid,
+  uint64_t start, uint64_t stop, uint64_t dbg_start, uint64_t dbg_stop)
 {
-    const char *fmt = WT_UNCHECKED_STRING(IIIrr);
+    const char *fmt = WT_UNCHECKED_STRING(IIIrrrr);
     size_t size;
     uint32_t optype, recsize;
 
     optype = WT_LOGOP_COL_TRUNCATE;
-    WT_RET(__wt_struct_size(session, &size, fmt, optype, 0, fileid, start, stop));
+    WT_RET(
+      __wt_struct_size(session, &size, fmt, optype, 0, fileid, start, stop, dbg_start, dbg_stop));
 
     __wt_struct_size_adjust(session, &size);
     WT_RET(__wt_buf_extend(session, logrec, logrec->size + size));
     recsize = (uint32_t)size;
     WT_RET(__wt_struct_pack(session, (uint8_t *)logrec->data + logrec->size, size, fmt, optype,
-      recsize, fileid, start, stop));
+      recsize, fileid, start, stop, dbg_start, dbg_stop));
 
     logrec->size += (uint32_t)size;
     return (0);
@@ -291,14 +292,14 @@ __wt_logop_col_truncate_pack(
 
 int
 __wt_logop_col_truncate_unpack(WT_SESSION_IMPL *session, const uint8_t **pp, const uint8_t *end,
-  uint32_t *fileidp, uint64_t *startp, uint64_t *stopp)
+  uint32_t *fileidp, uint64_t *startp, uint64_t *stopp, uint64_t *dbg_startp, uint64_t *dbg_stopp)
 {
     WT_DECL_RET;
-    const char *fmt = WT_UNCHECKED_STRING(IIIrr);
+    const char *fmt = WT_UNCHECKED_STRING(IIIrrrr);
     uint32_t optype, size;
 
-    if ((ret = __wt_struct_unpack(
-           session, *pp, WT_PTRDIFF(end, *pp), fmt, &optype, &size, fileidp, startp, stopp)) != 0)
+    if ((ret = __wt_struct_unpack(session, *pp, WT_PTRDIFF(end, *pp), fmt, &optype, &size, fileidp,
+           startp, stopp, dbg_startp, dbg_stopp)) != 0)
         WT_RET_MSG(session, ret, "logop_col_truncate: unpack failure");
     WT_ASSERT(session, optype == WT_LOGOP_COL_TRUNCATE);
 
@@ -313,8 +314,11 @@ __wt_logop_col_truncate_print(
     uint32_t fileid;
     uint64_t start;
     uint64_t stop;
+    uint64_t dbg_start;
+    uint64_t dbg_stop;
 
-    WT_RET(__wt_logop_col_truncate_unpack(session, pp, end, &fileid, &start, &stop));
+    WT_RET(__wt_logop_col_truncate_unpack(
+      session, pp, end, &fileid, &start, &stop, &dbg_start, &dbg_stop));
 
     if (!FLD_ISSET(args->flags, WT_TXN_PRINTLOG_UNREDACT) && fileid != WT_METAFILE_ID)
         return (__wt_fprintf(session, args->fs, " REDACTED"));
@@ -323,7 +327,9 @@ __wt_logop_col_truncate_print(
     WT_RET(__wt_fprintf(
       session, args->fs, "        \"fileid\": %" PRIu32 " 0x%" PRIx32 ",\n", fileid, fileid));
     WT_RET(__wt_fprintf(session, args->fs, "        \"start\": %" PRIu64 ",\n", start));
-    WT_RET(__wt_fprintf(session, args->fs, "        \"stop\": %" PRIu64 "", stop));
+    WT_RET(__wt_fprintf(session, args->fs, "        \"stop\": %" PRIu64 ",\n", stop));
+    WT_RET(__wt_fprintf(session, args->fs, "        \"dbg_start\": %" PRIu64 ",\n", dbg_start));
+    WT_RET(__wt_fprintf(session, args->fs, "        \"dbg_stop\": %" PRIu64 "", dbg_stop));
     return (0);
 }
 
@@ -548,20 +554,21 @@ err:
 
 int
 __wt_logop_row_truncate_pack(WT_SESSION_IMPL *session, WT_ITEM *logrec, uint32_t fileid,
-  WT_ITEM *start, WT_ITEM *stop, uint32_t mode)
+  WT_ITEM *start, WT_ITEM *stop, WT_ITEM *dbg_start, WT_ITEM *dbg_stop, uint32_t mode)
 {
-    const char *fmt = WT_UNCHECKED_STRING(IIIuuI);
+    const char *fmt = WT_UNCHECKED_STRING(IIIuuuuI);
     size_t size;
     uint32_t optype, recsize;
 
     optype = WT_LOGOP_ROW_TRUNCATE;
-    WT_RET(__wt_struct_size(session, &size, fmt, optype, 0, fileid, start, stop, mode));
+    WT_RET(__wt_struct_size(
+      session, &size, fmt, optype, 0, fileid, start, stop, dbg_start, dbg_stop, mode));
 
     __wt_struct_size_adjust(session, &size);
     WT_RET(__wt_buf_extend(session, logrec, logrec->size + size));
     recsize = (uint32_t)size;
     WT_RET(__wt_struct_pack(session, (uint8_t *)logrec->data + logrec->size, size, fmt, optype,
-      recsize, fileid, start, stop, mode));
+      recsize, fileid, start, stop, dbg_start, dbg_stop, mode));
 
     logrec->size += (uint32_t)size;
     return (0);
@@ -569,14 +576,15 @@ __wt_logop_row_truncate_pack(WT_SESSION_IMPL *session, WT_ITEM *logrec, uint32_t
 
 int
 __wt_logop_row_truncate_unpack(WT_SESSION_IMPL *session, const uint8_t **pp, const uint8_t *end,
-  uint32_t *fileidp, WT_ITEM *startp, WT_ITEM *stopp, uint32_t *modep)
+  uint32_t *fileidp, WT_ITEM *startp, WT_ITEM *stopp, WT_ITEM *dbg_startp, WT_ITEM *dbg_stopp,
+  uint32_t *modep)
 {
     WT_DECL_RET;
-    const char *fmt = WT_UNCHECKED_STRING(IIIuuI);
+    const char *fmt = WT_UNCHECKED_STRING(IIIuuuuI);
     uint32_t optype, size;
 
     if ((ret = __wt_struct_unpack(session, *pp, WT_PTRDIFF(end, *pp), fmt, &optype, &size, fileidp,
-           startp, stopp, modep)) != 0)
+           startp, stopp, dbg_startp, dbg_stopp, modep)) != 0)
         WT_RET_MSG(session, ret, "logop_row_truncate: unpack failure");
     WT_ASSERT(session, optype == WT_LOGOP_ROW_TRUNCATE);
 
@@ -592,10 +600,13 @@ __wt_logop_row_truncate_print(
     uint32_t fileid;
     WT_ITEM start;
     WT_ITEM stop;
+    WT_ITEM dbg_start;
+    WT_ITEM dbg_stop;
     uint32_t mode;
     WT_DECL_ITEM(escaped);
 
-    WT_RET(__wt_logop_row_truncate_unpack(session, pp, end, &fileid, &start, &stop, &mode));
+    WT_RET(__wt_logop_row_truncate_unpack(
+      session, pp, end, &fileid, &start, &stop, &dbg_start, &dbg_stop, &mode));
 
     if (!FLD_ISSET(args->flags, WT_TXN_PRINTLOG_UNREDACT) && fileid != WT_METAFILE_ID)
         return (__wt_fprintf(session, args->fs, " REDACTED"));
@@ -617,6 +628,22 @@ __wt_logop_row_truncate_print(
         WT_ERR(
           __wt_fprintf(session, args->fs, "        \"stop-hex\": \"%s\",\n", (char *)escaped->mem));
     }
+    WT_ERR(__logrec_make_json_str(session, &escaped, &dbg_start));
+    WT_ERR(
+      __wt_fprintf(session, args->fs, "        \"dbg_start\": \"%s\",\n", (char *)escaped->mem));
+    if (FLD_ISSET(args->flags, WT_TXN_PRINTLOG_HEX)) {
+        WT_ERR(__logrec_make_hex_str(session, &escaped, &dbg_start));
+        WT_ERR(__wt_fprintf(
+          session, args->fs, "        \"dbg_start-hex\": \"%s\",\n", (char *)escaped->mem));
+    }
+    WT_ERR(__logrec_make_json_str(session, &escaped, &dbg_stop));
+    WT_ERR(
+      __wt_fprintf(session, args->fs, "        \"dbg_stop\": \"%s\",\n", (char *)escaped->mem));
+    if (FLD_ISSET(args->flags, WT_TXN_PRINTLOG_HEX)) {
+        WT_ERR(__logrec_make_hex_str(session, &escaped, &dbg_stop));
+        WT_ERR(__wt_fprintf(
+          session, args->fs, "        \"dbg_stop-hex\": \"%s\",\n", (char *)escaped->mem));
+    }
     WT_ERR(__wt_fprintf(session, args->fs, "        \"mode\": %" PRIu32 "", mode));
 
 err:
diff --git a/src/session/session_api.c b/src/session/session_api.c
index ecc2e00d6b..74009e2d1d 100644
--- a/src/session/session_api.c
+++ b/src/session/session_api.c
@@ -1595,6 +1595,7 @@ __wt_session_range_truncate(
      *
      * No need to search the record again if it is already pointing to the btree.
      */
+    __wt_yield();
     if (start != NULL && !F_ISSET(start, WT_CURSTD_KEY_INT))
         if ((ret = start->search_near(start, &cmp)) != 0 ||
           (cmp < 0 && (ret = start->next(start)) != 0)) {
diff --git a/src/txn/txn.c b/src/txn/txn.c
index 8ab3e75bf5..7f814f17f3 100644
--- a/src/txn/txn.c
+++ b/src/txn/txn.c
@@ -1633,6 +1633,13 @@ __wt_txn_commit(WT_SESSION_IMPL *session, const char *cfg[])
         locked = true;
         WT_ERR(__wt_txn_log_commit(session, cfg));
     }
+    if (session->format_val != 0 && session->trunc_val != 0 &&
+      F_ISSET(session, WT_SESSION_TRUNC_DBG)) {
+        if (session->format_val != session->trunc_val)
+            (void)__wt_log_force_write(session, 1, NULL);
+        WT_ASSERT(session, session->format_val == session->trunc_val);
+    }
+    F_CLR(session, WT_SESSION_TRUNC_DBG);
 
     /* Process updates. */
     for (i = 0, op = txn->mod; i < txn->mod_count; i++, op++) {
@@ -2475,7 +2482,8 @@ __wt_txn_is_blocking(WT_SESSION_IMPL *session)
     if (F_ISSET(txn, WT_TXN_PREPARE))
         return (0);
 
-#ifndef WT_STANDALONE_BUILD
+// #ifndef WT_STANDALONE_BUILD
+#if 1
     /*
      * FIXME: SERVER-44870
      *
diff --git a/src/txn/txn_log.c b/src/txn/txn_log.c
index 9aaf0a8860..81889bbee1 100644
--- a/src/txn/txn_log.c
+++ b/src/txn/txn_log.c
@@ -286,12 +286,13 @@ __wt_txn_log_op(WT_SESSION_IMPL *session, WT_CURSOR_BTREE *cbt)
         ret = __txn_op_log(session, logrec, op, cbt, fileid);
         break;
     case WT_TXN_OP_TRUNCATE_COL:
-        ret = __wt_logop_col_truncate_pack(
-          session, logrec, fileid, op->u.truncate_col.start, op->u.truncate_col.stop);
+        ret = __wt_logop_col_truncate_pack(session, logrec, fileid, op->u.truncate_col.start,
+          op->u.truncate_col.stop, op->u.truncate_col.dbg_start, op->u.truncate_col.dbg_stop);
         break;
     case WT_TXN_OP_TRUNCATE_ROW:
         ret = __wt_logop_row_truncate_pack(session, logrec, fileid, &op->u.truncate_row.start,
-          &op->u.truncate_row.stop, (uint32_t)op->u.truncate_row.mode);
+          &op->u.truncate_row.stop, &op->u.truncate_row.dbg_start, &op->u.truncate_row.dbg_stop,
+          (uint32_t)op->u.truncate_row.mode);
         break;
     }
     return (ret);
@@ -568,13 +569,14 @@ err:
  *     Begin truncating a range of a file.
  */
 int
-__wt_txn_truncate_log(
-  WT_SESSION_IMPL *session, WT_ITEM *orig_start_key, WT_ITEM *orig_stop_key, bool local_start)
+__wt_txn_truncate_log(WT_SESSION_IMPL *session, WT_ITEM *orig_start_key, WT_ITEM *orig_stop_key,
+  WT_CURSOR_BTREE *start, WT_CURSOR_BTREE *stop, bool local_start)
 {
     WT_BTREE *btree;
     WT_ITEM *item;
     WT_TXN_OP *op;
     uint64_t start_recno, stop_recno;
+    char *p;
 
     btree = S2BT(session);
     start_recno = WT_RECNO_OOB;
@@ -602,6 +604,26 @@ __wt_txn_truncate_log(
             item = &op->u.truncate_row.stop;
             WT_RET(__wt_buf_set(session, item, orig_stop_key->data, orig_stop_key->size));
         }
+        if (!local_start && start != NULL) {
+            item = &op->u.truncate_row.dbg_start;
+            WT_RET(__wt_cursor_get_raw_key(&start->iface, item));
+            WT_RET(__wt_buf_set(session, item, item->data, item->size));
+            if (item->size > 12) {
+                p = (char *)item->data;
+                if (p[11] == '0' && p[12] == '0')
+                    F_SET(session, WT_SESSION_TRUNC_DBG);
+            }
+        }
+        if (stop != NULL) {
+            item = &op->u.truncate_row.dbg_stop;
+            WT_RET(__wt_cursor_get_raw_key(&stop->iface, item));
+            WT_RET(__wt_buf_set(session, item, item->data, item->size));
+            if (item->size > 12) {
+                p = (char *)item->data;
+                if (p[11] == '0' && p[12] == '0')
+                    F_SET(session, WT_SESSION_TRUNC_DBG);
+            }
+        }
     } else {
         /*
          * If the user provided cursors, unpack the original keys that were saved in the cursor's
@@ -617,10 +639,19 @@ __wt_txn_truncate_log(
         op->type = WT_TXN_OP_TRUNCATE_COL;
         op->u.truncate_col.start = start_recno;
         op->u.truncate_col.stop = stop_recno;
+        if (start != NULL)
+            op->u.truncate_col.dbg_start = start->recno;
+        else
+            op->u.truncate_col.dbg_start = WT_RECNO_OOB;
+        if (stop != NULL)
+            op->u.truncate_col.dbg_stop = stop->recno;
+        else
+            op->u.truncate_col.dbg_stop = WT_RECNO_OOB;
     }
 
     /* Write that operation into the in-memory log. */
     WT_RET(__wt_txn_log_op(session, NULL));
+    ++session->trunc_val;
 
     WT_ASSERT(session, !F_ISSET(session, WT_SESSION_LOGGING_INMEM));
     F_SET(session, WT_SESSION_LOGGING_INMEM);
diff --git a/src/txn/txn_recover.c b/src/txn/txn_recover.c
index 3e95d24e60..6c9601a7f8 100644
--- a/src/txn/txn_recover.c
+++ b/src/txn/txn_recover.c
@@ -123,10 +123,10 @@ __txn_op_apply(WT_RECOVERY *r, WT_LSN *lsnp, const uint8_t **pp, const uint8_t *
 {
     WT_CURSOR *cursor, *start, *stop;
     WT_DECL_RET;
-    WT_ITEM key, start_key, stop_key, value;
+    WT_ITEM dbg_start, dbg_stop, key, start_key, stop_key, value;
     WT_SESSION_IMPL *session;
     wt_timestamp_t commit, durable, first_commit, prepare, read;
-    uint64_t recno, start_recno, stop_recno, t_nsec, t_sec;
+    uint64_t dbg_start_recno, dbg_stop_recno, recno, start_recno, stop_recno, t_nsec, t_sec;
     uint32_t fileid, mode, optype, opsize;
 
     session = r->session;
@@ -184,8 +184,8 @@ __txn_op_apply(WT_RECOVERY *r, WT_LSN *lsnp, const uint8_t **pp, const uint8_t *
         break;
 
     case WT_LOGOP_COL_TRUNCATE:
-        WT_ERR(
-          __wt_logop_col_truncate_unpack(session, pp, end, &fileid, &start_recno, &stop_recno));
+        WT_ERR(__wt_logop_col_truncate_unpack(
+          session, pp, end, &fileid, &start_recno, &stop_recno, &dbg_start_recno, &dbg_stop_recno));
         GET_RECOVERY_CURSOR(session, r, lsnp, fileid, &cursor);
 
         /* Set up the cursors. */
@@ -261,8 +261,8 @@ __txn_op_apply(WT_RECOVERY *r, WT_LSN *lsnp, const uint8_t **pp, const uint8_t *
         break;
 
     case WT_LOGOP_ROW_TRUNCATE:
-        WT_ERR(
-          __wt_logop_row_truncate_unpack(session, pp, end, &fileid, &start_key, &stop_key, &mode));
+        WT_ERR(__wt_logop_row_truncate_unpack(
+          session, pp, end, &fileid, &start_key, &stop_key, &dbg_start, &dbg_stop, &mode));
         GET_RECOVERY_CURSOR(session, r, lsnp, fileid, &cursor);
         /* Set up the cursors. */
         start = stop = NULL;
diff --git a/test/format/ops.c b/test/format/ops.c
index f91ef39163..0b9abc35d7 100644
--- a/test/format/ops.c
+++ b/test/format/ops.c
@@ -493,7 +493,9 @@ begin_transaction(TINFO *tinfo, const char *iso_config)
 static void
 commit_transaction(TINFO *tinfo, bool prepared)
 {
+    SAP *sap;
     WT_SESSION *session;
+    WT_SESSION_IMPL *__sess;
     uint64_t ts;
 
     session = tinfo->session;
@@ -501,6 +503,17 @@ commit_transaction(TINFO *tinfo, bool prepared)
     ++tinfo->commit;
 
     ts = 0; /* -Wconditional-uninitialized */
+    __sess = (WT_SESSION_IMPL *)session;
+    /* If we have a truncate mismatch as we're about to commit, write a message and flush the ops
+     * tracing log */
+    if (__sess->format_val != 0 && __sess->trunc_val != 0 &&
+      __sess->format_val != __sess->trunc_val && (sap = session->app_private) != NULL &&
+      sap->trace != NULL) {
+        trace_msg(session,
+          "COMMIT: truncate mismatch txn id %" PRIu64 " format val %" PRIu32 " trunc val %" PRIu32,
+          __sess->txn->id, __sess->format_val, __sess->trunc_val);
+        (void)sap->trace->log_flush(sap->trace, "sync=off");
+    }
     if (g.transaction_timestamps_config) {
         if (prepared)
             lock_readlock(session, &g.prepare_commit_lock);
@@ -862,6 +875,7 @@ ops(void *arg)
     TABLE *skip1, *skip2, *table;
     WT_DECL_RET;
     WT_SESSION *session;
+    WT_SESSION_IMPL *__s;
     iso_level_t iso_level;
     thread_op op;
     uint64_t reset_op, session_op, truncate_op;
@@ -887,6 +901,7 @@ ops(void *arg)
 
     /* Set the first operation where we'll create a new session and cursors. */
     session = NULL;
+    __s = NULL;
     session_op = 0;
 
     /* Set the first operation where we'll reset the session. */
@@ -907,6 +922,7 @@ ops(void *arg)
 
             ops_session_open(tinfo);
             session = tinfo->session;
+            __s = (WT_SESSION_IMPL *)session;
 
             /* Pick the next session/cursor close/open. */
             session_op += mmrand(&tinfo->rnd, 100, 5000);
@@ -1118,15 +1134,20 @@ ops(void *arg)
             testutil_assert(ret == 0 || ret == WT_ROLLBACK);
             skip2 = table;
         }
-        if (ret == 0 && table->mirror)
+        if (ret == 0 && table->mirror) {
+            if (op == TRUNCATE)
+                ++__s->format_val;
             for (i = 1; i <= ntables; ++i)
                 if (tables[i] != skip1 && tables[i] != skip2 && tables[i]->mirror) {
                     tinfo->table = tables[i];
                     ret = table_op(tinfo, intxn, iso_level, op);
                     testutil_assert(ret == 0 || ret == WT_ROLLBACK);
+                    if (op == TRUNCATE)
+                        ++__s->format_val;
                     if (ret == WT_ROLLBACK)
                         break;
                 }
+        }
 skip_operation:
         table = tinfo->table = NULL;
 
