In Part 2, I took one sentence and traced it across four surfaces. The warning that mattered fell off three of them. The diagnosis was coordination: four surfaces, four authors, none of them looking at the other three. Single-sourcing is the textbook fix for exactly that. One canonical source, every surface derived from it, no drift.
Then Chris Despopoulos left a comment on the post that I have not stopped thinking about. He pointed out that the real problem runs deeper than coordination. Once you put a language model in the pipeline, the model generates its own version of the source, every time you ask it a question.
He is right. And it breaks the textbook fix.
Single-sourcing solved coordination across human authors. It does nothing about regeneration across LLM queries. Even with a perfectly maintained canonical source, the moment a model sits between your content and your reader, the text the user sees is not your page. It is the model's version of your page, generated fresh on that query, and again on the next one, slightly differently each time.
So the question this post answers is not "how do we keep four authors in sync." It is sharper. What do you build into the source so the load-bearing parts survive a reader you cannot see, rewriting your words every time someone asks?
The page is the backend now
This is not a forecast. It is the current shape of the field. Documentation platforms are reporting that close to half of their traffic now comes from AI agents rather than people, and that users increasingly ask an assistant first and expect a cited answer back, not a sidebar to browse.
For years the documentation page was the destination. The user arrived, read, left. Now the page is the data source, and the answer gets assembled somewhere else: a chatbot, an IDE assistant, an answer engine. You are no longer writing the last thing the user reads. You are writing the input to whatever writes the last thing.
That is a different job. It is closer to designing an API than authoring a page. You are shipping content that a machine will consume, transform, and re-emit, and you do not get to approve the final copy.
The craft question changes with it. Not "is this sentence clear" but "will the part of this sentence that carries the risk survive being compressed by something optimizing for brevity." In the example, the whole warning lives in two words: may impact. Strip the qualifier and "deleting this configuration may impact downstream models" becomes "configurations can be deleted." Same topic. Opposite advice.
Here is what I have landed on. Three things you build into the source so the qualifier survives. None of them is single-sourcing. All of them sit on top of it.
1. Schema in the source
Prose is easy to drop. A typed field is not.
If the warning is a sentence inside a paragraph, a model summarizing for length treats it as prose and compresses it like prose. The qualifier goes first, because qualifiers read as hedging and brevity optimization hates hedging.
If the same warning is a structured element, a typed admonition with a required condition, a callout carrying a severity attribute, a field the schema says must be present, then dropping it is no longer a stylistic choice. It breaks the structure. You have made the load-bearing part structurally load-bearing.
This is the thing technical writers have been doing for twenty years and most UX writers have not. Topic types, structured authoring, DITA, semantic markup. We called it content reuse and toolchain discipline. It turns out it is also what makes content survive a language model, because structure is the one signal a model is reluctant to violate.
The clearest proof already exists, and it is the API spec. An OpenAPI document is schema in the source by design. required: true does not get paraphrased away, because it is a typed field, not a sentence. The contract holds because the structure holds. That is the entire game, and it is why the next post in this series is about what happens when the machine-readable contract is the documentation. For now the lesson generalizes cleanly: make the part that matters a field, not a phrase.
2. Constraints at retrieval
Structure gets you into the building. It does not tell the model what to do once it is inside.
The retrieval layer is where most of the current conversation lives, and most of it stops at one file. llms.txt is having its moment, and it is genuinely useful. But it is worth being precise about what it does. llms.txt is a routing file. It points an agent at your best pages. It says read these, not those. It does nothing to guarantee the qualifier survives once the agent gets there and starts generating.
Necessary, not sufficient. Routing is not preservation.
The preservation work is one layer down, in how retrieval is constrained. Rank the canonical warning above the softer onboarding version so the model retrieves the strong one first. Pin specific phrases so the condition cannot be dropped. Instruct the assistant, in the system layer, to preserve stated conditions rather than smooth them out. This is prompt and retrieval engineering, and it is squarely a content job, because the person who knows which two words are load-bearing is the person who wrote them.
If you only ship llms.txt and call your documentation AI-ready, you have published a good map to a building with no rules inside it.
3. Validation downstream
You cannot trust the regeneration. So you check it.
Documentation QA used to end at publish. You proofed the page, you shipped it, the page was the artifact. Now the artifact is what the model says about the page, and that is generated after you ship, on every query, where you are not watching.
So QA has to extend past the model. Treat the assistant's answer like a build output that needs validation. Sample the questions users actually ask. Run them. Check whether the retrieved answer keeps the qualifier. Flag the drift when it shows up, because it will. This is testable. It is the same instinct as a link checker or a style linter, pointed at a new surface: not "is the source correct" but "is the thing the user receives still correct after the machine got hold of it."
This is the part almost nobody has built yet, and it is the part I find most interesting, because it is where documentation stops being a publishing function and becomes a monitoring one.
The shape of it
Single-sourcing gave you one canonical source. The agent era needs three more things layered on top: structure the model will not break, retrieval that knows what is load-bearing, and validation that checks what came out the other side.
Same sentence, two paths. Single-sourcing gave you one canonical source. The agent era needs three more things layered on top of it.
The through-line of this whole series has been one claim: documentation is an interface, and we keep building it like a library. Part 3 is where that stops being a metaphor. When the chatbot answers first and your page is the data source behind it, you are not writing a library entry anymore. You are engineering a system whose output you do not get to see before it ships.
That is the argument for building the pipeline and not just the page. The writer who only writes the page is writing the input and hoping. The writer who builds the structure, the retrieval rules, and the validation is the one who still has a say in what the user actually reads.
I keep arriving at the same place from the tooling side. Thanks to Chris for naming it more sharply than I had.
Part 3 of the Docs as Interface series. Part 1: Documentation Is an Interface. We Keep Building It Like a Library. Part 2: Progressive Disclosure Is a Question Hierarchy.
Discussion
When was the last time an AI tool generated documentation that passed your review without edits? Not 'good enough to fix.' Actually passed.