Move the "skip DNSKEY when no parent DS" decision out of Collect and into the rules, so the prober stays a pure observer. The dnskeyQueryRule and dnskeyMatchesDSRule already return StatusUnknown when no parent DS is present.
Replace the inline loop with a call to the existing primaryParentView() helper so the selection algorithm lives in exactly one place.