One question we might ask is "what happens when your pattern to replace is void, or an empty splice"?
Let's look at history:
rebol2>> find [a a a] []
== none
rebol2>> replace/all [a a a] [a] [b]
== [b b b]
rebol2>> replace/all [a a a] [] [b]
== [a a a]
So Rebol2 (and Red) doesn't think there's an "empty splice" at the beginning of a BLOCK!, if you ask FIND. But it does think it's there if you ask PARSE:
rebol2>> parse [a a a] [[] some 'a]
== true
Ren-C's "opt in with void/none" and "opt out with COND" clears up this distinction... FIND of an empty splice or void always succeeds.
But it does create an issue for something like REPLACE, which would become an infinite loop if it found infinitely many empty splices or voids.
We could say it was an error. But then there'd be no way to telegraph "return the original input, unmodified" from the pattern slot... (you could only use COND to produce NULL overall).
Replacing with a pattern that is empty could represent a misunderstanding that's a big enough deal that facilitating it as a no-op might not be the right choice.
But I don't know how often that misunderstanding happens, so I can't really tell.
I'm tempted to make it an error until someone shows a really good reason why it shouldn't be.