ContributorMural::Resolver
Merges config users and API contributors into the final render list. Pure: takes already-fetched contributor data, performs no IO.
Class methods
grouped(users : Array(EmbeddedUser), config : Config) : Array(Tuple(String | Nil, Array(EmbeddedUser)))
Splits embedded users into ordered (title, members) sections. Ungrouped
users come first without a heading; explicit groups fixes the order,
otherwise groups appear as first mentioned in the config.
This is the one place a person can land in more than one bucket. Everything
upstream — the fetch, the sort, the limit — has already treated them as
the single person they are; also_in only decides how many times that one
entry is drawn.