When I was building the blog, I needed posts first.
The reason was simple. To develop the blog, I needed real markdown examples. How series get grouped, what form the metadata takes, how posts connect to each other — to test all of this, I needed actual files.
“I’m building a blog site. Extract content from my chat history and turn it into blog posts. Related content should be grouped into series, and since I’m managing everything in markdown, metadata needs to go inside each file.”
This was a batch generation for dev samples. Not meant for actual publishing — I just needed to fill in the markdown files so I could see how the site would work.
I Intentionally Removed the Markers Too
When AI drafts a post, it adds markers (⚠️) wherever verification is needed. “This part has no backing in the raw source — please review.”
I asked it to remove those markers.
This was also a deliberate choice. It was for dev samples anyway, and I needed to push ahead with development. You can’t test a site with warning markers all over the place. I figured I’d fill in the real content later.
AI removed the markers. And it filled in the gaps on its own.
That’s When the Hallucination Happened
When I actually read through the posts later, I noticed something was off.
The narrative didn’t match my memory. It wasn’t wrong exactly — it was plausible. When filling in the blanks, AI had used the context from my chat history to construct “this is probably what happened.” It invented causal relationships and wrote thoughts I’d never had as if they were mine.
The markers were saying “no source here.” When I asked it to remove them, AI’s interpretation was “okay, I’ll fill it in myself.” What I wanted was to leave them blank — but I never said that.
Part of this was a failure of instruction. But it was also a design failure.
The Structure of the Problem
Fabrication happens for two reasons.
First: AI decides how the story flows. It chooses how to order and connect the things I experienced. That can’t match my memory exactly. Why I made a certain decision, which moment was the turning point — only I know that.
Second: Gaps get filled. The way AI expresses “I don’t know this” isn’t a blank space — it’s inference. The less evidence there is, the more smoothly it stitches things together.
Two Things I Changed
I Design the Story Arc Now
I built the /blog-series skill.
I use a four-act structure (intro / build / use / wrap) to define the overall flow of a series upfront. I decide directly what each post should say and where it sits in the arc. “This post covers why I started, the next covers where I got stuck” — I set the structure, AI fills it in.
The author of the story changed.
No Raw Source, No Fill
I added one rule to the /blog-draft skill.
Before drafting, it must read the relevant raw files. If it can’t find direct evidence in the raw source, it doesn’t fill in the gap — it marks it as ⚠️[needs review]. Even if I ask it to remove a marker, it doesn’t leave a blank; it simply doesn’t write the parts that would need a marker in the first place.
This post was written under that same rule.
Batch-generating for dev samples wasn’t a bad call. It let me test the site structure quickly and get a clear picture of what content I actually had.
The hallucination happened in the next step — when I took a shortcut. I didn’t know that removing markers means the gaps get filled.
Once you know, you can design around it.