The abstention shortcut in faithfulness() deserves a mixed-answer fixture. An output such as "I don't know, but annual refunds are available for 60 days" matches ABSTAIN.search and returns score=1.0 without checking the unsupported claim that follows.
I would keep abstention detection separate from claim support, and only treat a pure refusal as having no factual claims to score. Add a quoted occurrence of "I don't know" inside an otherwise ordinary answer too. That tests whether the harness recognizes the response behavior, rather than promoting any matching phrase to a perfect faithfulness result.