We slightly changed the way this worked a few months ago, and we neither made a discourse post (naughty!) nor changed the docs (unforgivable!).
When a VCF is imported with Hail, the FILTER field is read into
va.filters, which is of type
Set[String]. This needs to be a set because a variant can have multiple filters applied. PASS means that no filters were applied, and produces an empty set in
va.filters. The best way to filter to PASS variants is:
pass_vds = vds.filter_variants_expr('va.filters.isEmpty()', keep=True)