Situation
An assistant persona ("Finn", a financial onboarding guide) had an explicit, strongly-worded rule in its role prompt: NEVER use em dashes, with a rewrite example. The founder still saw em dashes in nearly every conversation, including in a scripted onboarding turn.
Root cause
The task-level prompt appended after the role prompt contained ~15 em dashes in its own instructional prose ("One idea per paragraph — each paragraph renders as its own chat bubble") and, worst of all, in a verbatim script the model was told to say:
Before starting, frame the interaction: "Great — I'll ask a few questions to personalize things."
In-context examples dominate rules. The prompt demanded one style and demonstrated another; the model imitated what it saw, not what it was told.
Fix
- Purge the banned pattern from every model-visible string: prompt prose, scripted example lines, and tool RESULT strings (a tool returned 'User has no space yet — complete registration first', which also lands in context).
- Keep exactly one occurrence: the explicit counter-example inside the ban itself ("'your goals — whatever they are — matter' should be 'your goals, whatever they are, matter'").
- Add a one-line style reminder to the last-composed section of the system prompt (recency effect): the final block the model reads before generating is a strong lever for tic suppression.
Rule
When a model keeps violating an explicit style rule, grep the ENTIRE composed context for the banned pattern before strengthening the rule: every prompt layer, scripted/example lines, and tool return strings. The prompt must exhibit the style it demands; a rule contradicted by its surrounding prose selects the prose.