Occasionally, published repository history is rewritten. This is a painful process, but worth doing in some situations -- for example, if large binaries have been committed and the repository has become too large to work with. This is prevalent enough that GitHub has a page dedicated to it.
Or if you have accidentally published a real dumb commit with a bogus timestamp which makes every graph of your cherished open source project draw its X axis starting on January 1, 2000 and look stupid, as with rPbb45f5eff5. ARRRGH.
I think the ship has sailed for me to undo that, but I'm absolutely nuking it if we ever have a legitimate reason to rewrite history.
If commits are rewritten, Phabricator will now recognize that the old commits have been deleted (after T9028), but edges linking to them will stay in place and users won't have a reasonable path to find the new hash. While we can't completely recover from this situation (for example, we've already sent a bunch of email with the old hashes, and it is almost certainly not reasonable to try to rewrite old comments mentioning them) but we can give users more guidance to find their way to where they want to go.
In particular, we can provide a way for users to populate a map from old hashes to new hashes, and check that map when a user loads the page for a deleted commit. (We may be able to go slightly further than this, too.) This should generally give users a better pathway forward in a rewritten repository, e.g., from revision to old commit to new commit. Not perfect, but a whole lot better than a dead end.