I'll agree with you that size() seems misplaced.  It probably is.  I can bring back Sequence and put size on it.

But hash() is part of the equivalence function.  The hash computed by ignore trailing whitespace is different than the hash computed by the default ignore-nothing.  If two items in the sequence are equal by the equals() function, their hashes must also be equal.  Putting hash() on the model starts to make it much harder to ensure this remains true.

I also didn't want to enforce the requirement that the hash be pre-computed by the sequence model.  Instead I wanted to allow the equivalence function to handle the hash.  If it caches the hashes in the model (like RawText does), great.  But I think in the case of patience diff I might be able to only get the hash once for each line.  That means the implementor might be able to avoid keeping the hashes, and perhaps more importantly, avoid computing them for the long common header/footers that often exist on files.

So I don't think we should move hash.