And you know their solution won't work because...oh, yeah, you're smarter than they are. I suspect the real issue is that you have not communicated all the requirements correctly, but since you are very familiar with the problem, you know more than you have told them, and that biases your view on their solution.
You assume that every candidate will be able to solve every problem you give them. You don't think it's possible for a candidate to come up with a solution that is incorrect despite being given correct requirements? Also, if I tell them their solution wouldn't work and they disagree and show me I'm wrong and their solution does work, then I'd be impressed that they were able to come up with a solution I hadn't thought of. It has nothing to do with me being smarter than them or not, just being more familiar with the problem. You shouldn't be asking a question to a problem that you aren't familiar with, simply by being very familiar with the problem I would be able to tell with pretty good accuracy if a particular solution would work or not. Obviously you know more than you have told them, you at least know 1 or more valid solutions. It would be pointless to give them the solution :).
And, unless the problem is still trivial, the only correct answer is "how about we meet tomorrow at 2pm, which will give me time to see if it can be done at all, and give you time to think about the change you requested and better define it so that we don't make the same mistake of not having all the requirements up front". Seriously, if you change your mind a few minutes after seeing something that meets all your requirements, you really do need to sit back and think about what the requirements really are before asking someone to waste money (somebody's...you, pretending to be the client, the company, etc.).
You have never come up with a solution to a problem and then found an edge case that meets the requirements, but the current design would not be sufficient to fix? In such a case the only solution is to modify the design to accommodate the new case. You also assume that clients are always capable of describing all the requirements they need the first time and never make mistakes or forget something, all of which is very common. Not to mention that this is a hypothetical situation that is fabricated specifically to see how the candidate would respond in a similar real-world situation. Thus you seem to be taking this way too seriously.
The company I work for is small enough that programmers are likely heavily involved in requirements gathering, but for larger companies, that might be something only system analysts do. Depending on the job opening, your test might seem completely out of left field to a programmer who has never done formal analysis tasks.
I can understand this to a point, but we aren't talking about a formal analysis. We're talking about "you need to design something that achieves this specific goal." Something that every programmer who is capable of working on their own should be able to do. If you have to design everything for the programmer and they can only implement someone else's design, then they aren't an extremely useful programmer.
To test "collaboration", you need to assign a current employee to be the candidates "team" and let them solve the problem jointly. Either that, or you can be the collaborator, but then don't get to be the client, too, which would mean no "surprises" to spring on them
"Surprises" could simply be edge cases the candidate hadn't thought of. The point is to get a dialogue going and see how they think, how they approach the problem, how they react if things don't go smoothly, etc. Collaboration would evolve normally from this type of discussion where you aren't sitting and waiting for responses from the candidate but actually discussing the problem with them.