Aren’t there some markers in the context that delimit sections? In such case the harness should prevent the model from creating a user block.

This is the "prompts all the way down" problem which is endemic to all LLM interactions. We can harness to the moon, but at that moment of handover to the model, all context besides the tokens themselves is lost.

The magic is in deciding when and what to pass to the model. A lot of the time it works, but when it doesn't, this is why.

You misunderstood. The model doesn't create a user block here. The UI correctly shows what was user message and what was model response.