Long ago, Differential reviewers were moved from a dedicated table to the `edge` table. This now appears to have been a mistake.
Reviewers are significantly more complex than other edges. Reviewers are the only data type which uses `edgedata`, and we could remove this table and simplify the abstraction across all applications by moving reviewers back to a dedicated table.
Reviewers are complex enough to justify a runtime object (`DifferentialReviewer`) //anyway//, so we aren't meaningfully simplifying anything by using edges.
Technically, we do get slightly easier transaction rendering. But this is a tiny benefit in a vast gulf of costs and complexities.
A particularly nasty aspect of this is that a nontrivial amount of real transaction logic lives outside of the transaction editor. For example, `DifferentialReviewersHeraldAction` has logic to compare reviewer strength. It should not.
This isn't actively hemorrhaging or anything, it's just a fairly clear infrastructure defect.