There is an outdate comment in bt_sync.c leading me to believe checkpointing truncation doesn't work in durable history:
For example, if the stable timestamp at 2 and we truncate a page at timestamp 3. According to the comment, as the truncate is visible to checkpoint, checkpoint will skip the page, which should cause problems if we need to rollback the truncate in rollback to stable.
However, I found the code is working in my test. So I checked the code and found the code doesn't work as the way described in the comment.
Instead of ignoring the page, we write a proxy cell in the page's parent and everything works.