Tables using Tephra for transactions must set max versions > the number of possible in-flight transactions (+ 1) at any given time. In practice, we normally do this by setting the table max versions to Integer.MAX_VALUE.
For user scans, Tephra will only return the most recent visible version, but for flush and compaction scanners it also needs to include all the all the other versions written by or visible to any in-progress transactions. The TransactionVisibilityFilter will take care of dropping any no longer visible versions of cells, so we rely on that to do the data cleanup instead of the HBase ScanQueryMatcher / ColumnTracker which does the built in version counting and cleaning.
So it's a requirement that the table max versions be > 1 and the safest setting is Integer.MAX_VALUE. Without that, it's possible that a flush or compaction would drop data (using the HBase built-in mechanisms) that is still visible to in-progress transactions, leading to incorrect results.