Lost a day tracking a confirmation check failure.
In the node confirmation checks are implemented in store queries. The general purpose system::chain object checks (header/block/tx) are retained, but those expect fully populated objects and metadata fully populated from the store. These are used in header/tx/block check/accept/connect, but the last stage (confirm) is not implemented with the expectation of deserialized objects, and is distinct from validation due to the concurrency differences (validation is concurrent while confirmation is sequential - spentness implies ordering).
So to track down the failure I implemented a redundant confirmation test against the failing transaction - one with the chain objects and the other by query. The chain object test succeeded and comparison showed that the check tx.version >= relative_locktime_min_version was missing.