Unions all three spend facts rather than trusting any one of them. The wire contract permits
isSpent: true with an empty spentBy (settlement inputs needing no forfeit are written that
way), so a spentBy || settledBy definition would classify a spent VTXO as spendable — inflating
balance and selecting it for a send that must fail.
isUnrolled is deliberately not part of this union: it says where the output lives, not that
it was consumed. Mirrors NArk's ArkVtxo.IsSpent(). The location axis is canSweepOnchain,
which the two capability predicates below subtract instead.
Whether a virtual output has been consumed and can never be spent again.