Why not? What should it be? If you didn't find a result, you don't want to continue the computation anyway, do you? Or, I guess you might, but then you'd use a SAFELY TRY, just as you would for any other anticipated error. You don't want to continue the computation with some default value that wasn't actually found in the stream, is what I mean.
In a perfect world, FIND FIRST would really be FIND FIRST INDEX and would report -1 or something if nothing satisfies the condition. I mean, for lists, too.
I know what you mean about initialization, but that's going to be more and more common as libraries grow into extensions, I think.
You broke the grouping of the category by saving it in v9 instead of v10. :~(
On the subject of error handling, why can't I get the block to behave this way:


I hoped that putting "else" in the "separator" field would do this, but no such luck. This would be perfect, because if you want to return some value when the computation asks for too many tails, you can click the arrow. But if you don't click the arrow, you get an error message on overtailing.
Your proposed use of COPY STREAM instead of my idea has the disadvantage that it makes the user think about the below-the-line view of the stream abstraction. I think the user should write the stream expression as if it's guaranteed that the desired item will be found in the stream, and only then, take the entire perfect stream expression and wrap a tail limit around it. (And by the way, when I first read it, I thought COPY STREAM would actually copy it right up front, like LIST-ITEMS, because the word "copy" in its name painted so strong a picture in my mind. I don't have an alternative name to propose right now but I want to think about that.)
The other thing about STREAM-LIMITED vs. COPY-STREAM is that the latter makes you know exactly what stream isn't cooperating, whereas the former doesn't care where the problem arises.
Dropping blocks: I guess to a first approximation I want users to be able to take a list program and wave a magic wand over it to drop "stream" into the names of all the blocks and have it work. (In a really perfect world, instead of a new category, the user would throw a switch and the plain old list blocks would start doing lazy evaluation! Like the bignum library. But I'd never in a million years get that past Jens.) But anyway, that's why I want FIND FIRST. I agree with you that if you're writing a stream program from scratch you don't need FIND FIRST because the library isn't going to compute more than the first item of a KEEP unless you take the tail of the result. So HEAD OF (KEEP...) is already efficient. But if you already wrote a list-based function and you're streamifying it, this just lets you not think about why there isn't a FIND FIRST.
As for INDEX OF, you're not going to use it to, e.g., swap two items of a stream, but you might

I dunno.
I don't have strong feelings about this. I'm pretty happy if I can generate the stream of all the primes! You're the one who needs this for a practical project. :~)