pub fn build_view_core(
actors: &[Actor],
contacts: &[ChatContact],
assignments: &BTreeMap<String, Vec<String>>,
categories: Vec<DirectoryCategory>,
agreements: &[Agreement],
) -> DirectoryViewExpand description
Pure core: merge directory actors + chat contacts into one categorised view, given the persisted
category assignments and the category list. Kept pure (no filesystem) so it is deterministically
testable; build_view wires it to the persisted stores.