One contract for every family: a list with occ, the STATE-level residual
series (per site, or per site and season for a multi-season family), and
det, the OBSERVATION-level series (per visit / pass / distance bin). A
family carrying only one of the two levels fills that one and leaves the
other NULL; nothing returns a bare matrix, so a caller reading $occ gets
the state residual or NULL, never an error.