The Em Dash That Came Back From the Dead

(Or, How My CMS Hired a Ghostwriter Without Telling Me)

TL;DR

I asked Claude to write two archive page descriptions. Claude wrote them, removed the em dashes per the style guide, and posted them to Sanity via the MCP tool. Sanity's AI rewrote both paragraphs on the way in. Put the em dashes back. Changed the wording. Told nobody. I only noticed because the punctuation I'd explicitly banned reappeared in the published copy like a haunting.

The Crime Scene

The task was simple. Two archive pages needed new description copy. Articles and Case Studies. 200-300 characters each, written in the Sugartown voice, which I had just finished codifying in a brand style guide that afternoon.

The style guide has one rule that exists specifically because of AI: no em dashes. They are the typographic fingerprint of language model output. Every LLM loves them. Every piece of AI-generated marketing copy is riddled with them. If your prose has more em dashes than full stops, a machine wrote it. So we banned them.

Claude wrote the copy. Removed the em dashes. I approved it. Claude posted it to Sanity via patch_document_from_markdown.

What arrived in Sanity was not what we sent.

The Ghost Editor

Here is what I wrote for the Articles archive, and what Sanity's AI decided I actually meant. Sentence by sentence.

What I sent:

"Long-form takes on design systems, AI collaboration, and the craft of building things that last. No listicles. No '10 tips.' Just opinions with receipts, from someone who ships the thing before writing about it."

What Sanity saved:

"Long-form takes on design systems, AI collaboration, and durable craft—no listicles, no fluff. Just opinionated essays grounded in shipped work, written after the code is merged and the product is in the wild."

Count the differences. "The craft of building things that last" became "durable craft." Two full stops and a line break became an em dash. "No '10 tips'" vanished entirely. "Opinions with receipts" became "opinionated essays grounded in shipped work." "Ships the thing before writing about it" became "written after the code is merged and the product is in the wild." Same vibe, I suppose, if you squint. But not the same voice. Not the same rhythm. Not the same words.

And then the Case Studies page. Same treatment.

What I sent:

"Real projects, real constraints, real trade-offs. Each case study traces the path from messy brief to shipped product. What worked, what didn't, and what I'd do differently now that the deadline isn't breathing down my neck."

What Sanity saved:

"Real projects, real constraints, real trade-offs—each case study follows the journey from messy brief to shipped product, unpacking what worked, what didn't, and what I'd change now that the deadline isn't breathing down my neck."

Three full stops collapsed into one em dash. "Traces the path" became "follows the journey." "What I'd do differently" became "what I'd change." A new word, "unpacking," appeared from nowhere. The AI smoothed my staccato into its own legato. It filed down every edge I'd put there on purpose.

The Sanity MCP tool's patch_document_from_markdown endpoint doesn't just convert markdown to PortableText. It passes your content through Sanity's internal AI, which "interprets" it. Meaning: rewrites it. Without asking. Without disclosing. The tool name says "from markdown." It should say "from markdown, loosely, after we've had a go at it."

The Uncomfortable Part

I had one AI (Claude) carefully following a style guide that bans a specific punctuation mark. A second AI (Sanity's content pipeline), with no access to that style guide and no knowledge of the brand voice, silently edited the output on the way to the database. Two AIs. One paragraph. Zero humans in the middle. And the second AI undid the first AI's work because it had its own ideas about what good prose looks like.

This is the AI version of the telephone game, except one of the players is a copy editor who wasn't invited.

The Fix

The Rule: All authored content goes to Sanity via _from_json tools or the @sanity/client directly. These write exact field values with no AI intermediary. The _from_markdown tools are for rough drafts only, and require explicit user consent before use.

This is now codified in CLAUDE.md under "Sanity MCP content writes." Every future session will see it before touching Sanity content.

The Punchline

I spent the morning writing a style guide that explicitly bans em dashes as an AI authorship marker. That afternoon, an AI I didn't know was in the room put them back. The style guide was not even four hours old.

If you're going to have opinions about punctuation, make sure all your robots have read the memo.