After a real brain-bender of a day, I have commit propagation from the adjusted branch back to the original branch working, without needing to reverse adjust the whole tree. This is faster, but the really nice thing is that it makes individual adjustments simpler to write. In fact, it's so simple that I took 10 minutes just now to implement a second adjustment! [[!format haskell """ adjustTreeItem HideMissingAdjustment h ti@(TreeItem _ _ s) = do mk <- catKey s case mk of Just k -> ifM (inAnnex k) ( return (Just ti) , return Nothing ) Nothing -> return (Just ti) """]]