We’re building Distro one feature at a time, and lately that has meant getting our stories to render properly inside AI assistants like Claude and ChatGPT.

That’s where the bug showed up. A story opened in Claude’s side-panel reader carried a byline we didn’t recognize: “Bradley Keoun and assisted by Claude.”

The phrase was an AI-use disclosure I’d once typed into an author field. Our system stored bylines as plain text and guessed the names out of them, so it had minted a real author named “assisted by Claude,” complete with its own public author page.

We hadn’t noticed, because the website never showed it. DistroVerse renders the text byline, which I’d cleaned up in the editor long ago. But the system kept a second copy of the byline – the records – and that copy is what gets served to AI assistants. The phantom lived on there.

Professional publishing systems don’t work this way. In Arc, The Washington Post’s platform, or Ghost, or WordPress, authors are records in a database – people with pages, photos and bios – and the byline is derived from them. It’s table stakes, and we didn’t have it.

(We decided we don’t need to include “assisted by Claude” in the byline because we fully disclose how AI was used in an entire paragraph at the foot of the story. I am using Claude, but the work is mine; I check everything I publish and am responsible for everything that goes out.)

Design choices

We had built the database tables for exactly this back in April, during an SEO push, and never wired them up. Nothing on the site read them. The admin page for editing authors had a broken link the entire time, and nobody noticed, because nothing pointed at it.

No time like the present.

We studied how the established platforms handle it and made three choices worth recounting.

Authors own the byline. Our old free-text field survives only as a per-story override, for prose like “Staff report.” Arc does the same, which meant every existing story looked identical on day one.

One rule, everywhere. We had five separate pieces of code deriving bylines, with three different formatting opinions. They became one.

Records are the source of truth. The structured data that search engines and AI agents read always comes from the records, even when the override is set.

We split the work into three phases, so each could be tested and released on its own:

  1. Flip the data model invisibly. We checked 200 recent stories, byline for byline – nothing changed.

  2. Build the visible parts: an author picker with drag-to-reorder, and bylines that link to author pages.

  3. Add the editorial tools: merging duplicate authors, with old author links redirecting forever.

It took three days to plan and implement – not continuously, but checking in regularly with Claude Code.

Real bylines, at last

Now we have what Arc and Ghost and WordPress developed over many years for their customers: real authors, real author pages, multi-author bylines, a merge tool.

The lesson is what a byline actually is. It looks like the simplest field in the system: a line of text under a headline.

Done properly, it’s an identity system: search, author pages, feeds, syndication and now AI agents all hang off it. Get it wrong and a disclosure becomes a co-author.

If you’re building your own CMS, find these systems early. They hide inside the fields that look trivial.

The phantom co-author is gone.


HOW AI WAS USED IN THE PRODUCTION OF THIS PIECE: I got AI to write the first draft of this article, relying on the transcript of my coding session within Claude Code inside VS Code and a custom skill I developed to replicate my own writing style. Then I used Distro Publisher, our official MCP server, to file the story as a draft directly from Claude Code to my newslode. I then edited the draft in DistroVerse’s editing interface and checked all the facts before publishing.