Two Jobs That Look the Same and Are Not
Three tasks ride the same door: tidy an extracted body into readable markup, summarize an article, translate it. Mechanically identical — text in, text out, one shot, cached. And one of them should have no voice at all.
Tidying is janitorial. Removing navigation and advertisements has no author, and a personality performing it is decoration that costs tokens and can only introduce artifacts. Summaries and translations are prose a person reads as somebody's writing, and there the voice is the product rather than a garnish.
So the persona cannot be a property of the door. It is a per-call flag, defaulting to none, which lets one shared lane serve both without either compromising.
Send the Identifier; the Voice Stays With Its Owner
When a call does want a voice, it sends an identifier and the owner resolves it against its own canonical definition. The alternative — copying the prompt text into the caller — creates a second definition of a character that will drift from the first, and drift in a persona is invisible until someone notices the tone is subtly wrong in one surface.
A detail from live use is worth keeping: the canonical persona instructs a trailing marker used by an interface that has an avatar. A one-shot completion has no avatar, so the marker has to be stripped at the door — and it was caught only because someone read the very first verification output. It would otherwise have rendered inside articles and been read aloud by the speech synthesis. When you borrow a prompt written for another surface, you inherit its output conventions too.
Different Work Deserves Different Dials
Once the two uses are distinguishable, they stop wanting the same settings. Tidying is mechanical and can run on the cheapest thing that does it correctly. Derivations are prose a person reads closely, and may deserve something better. Fusing them onto one setting forces a single trade-off across two different jobs.
A Split Must Fork What Is Running
Here is the migration trap, and it is the kind that ships inside a feature. When the shared setting was split in two, the running system had been deliberately tuned away from its defaults. Seeding the new lane from the configuration default would have quietly reverted that tuning for one of the two — a regression arriving with release notes announcing an improvement, which is the hardest kind to notice.
The rule: when splitting a setting, copy the live value into both halves, not the factory default into the new one. The default describes what a fresh installation should do. It says nothing about what this installation has already decided.