When people picture AI for regulatory writing, they usually have a document like a Clinical Study Report in mind: long, mostly narrative, where the value is turning trial data into readable prose. Module 3 is a different kind of document, and the difference matters for anyone trying to automate it.
A CMC dossier is built mostly out of tables. Batch analyses, batch formula, process validation, stability, specifications, impurity profiles, analytical methods, manufacturing sites — most of the content is structured data, and a lot of those tables describe the same underlying facts from different angles. A single drug-substance lot can appear in the batch-analysis table, again in the process-validation summary, and again across two or three stability tables. An impurity turns up with a numeric limit in the specification, with a paragraph of discussion in the impurities section, and again as a degradant under stability. A reviewer expects all of those appearances to line up, with the same numbers and the same identities, and to trace back to the same source document.
Producing the prose is not what makes that hard. Keeping the data consistent across the whole dossier is, and it turns out to be a deeper problem than it first looks.
Why section-by-section drafting struggles here
Most document automation, including ours in its earlier forms, works one section at a time: pull the relevant source data for a section, render its table, move on. For a document whose sections are largely independent, that is perfectly reasonable. Module 3's sections are not independent. The batch tables, the stability tables and the process-validation summary are all views onto the same set of lots. The specification, the impurity discussion and the stability degradants are all views onto the same set of impurities.
When each of those sections retrieves and renders its own data in isolation, a few things follow. No single section ever holds the whole picture; it sees only its slice. The relationships that actually matter in CMC, such as which lot came from which, which strengths group together, and which lot was used for tox rather than clinical or stability, never get assembled anywhere, because no one section needs all of them at once. And small inconsistencies creep in without anyone noticing. The lot list in the process-validation table drifts from the lot list in stability. A limit gets transcribed slightly differently in two places. The problem usually surfaces only when a reviewer catches it, late.
That is a data problem rather than a writing one, and it is the reason Module 3 has stayed stubbornly resistant to automation while narrative documents have moved much faster.
Consistency you build in, rather than check for afterward
The approach we are taking with CMC starts from that observation. Instead of drafting each table from its own separate retrieval, we work out the data that recurs across the dossier once, up front. The writer reviews and confirms it, and from then on every section renders from that confirmed data rather than from a fresh retrieval of its own. When the batch-analysis table and the stability tables draw on the same set of lots, they agree because they are drawing on the same facts, not because a later pass happened to reconcile two separate drafts.
In practice this is less dramatic than it sounds and considerably more useful. The writer spends their time reviewing and correcting the data once, rather than chasing the same number through a dozen tables and hoping they caught every copy. Consistency stops being an audit you run at the end and becomes closer to a default.
The data is never invented. Each value is read from your source documents, which for CMC means development reports, specifications, forced-degradation studies, DMF letters, GMP certificates and the like; or it is confirmed by the writer; or it is marked as a gap where the source is silent. Where a required number is missing, Asthra writes [FILL:] rather than a plausible guess, the same way it handles gaps elsewhere. And because the data is held as confirmed, structured facts rather than prose copied from one table into the next, a question like "where did this impurity limit come from, and is it the one used in stability?" has a single place to point to for the answer.
Where this fits
This is the same idea that sits under the rest of the studio, the state-backed half of state-backed authoring, where the facts live in structured form and the document renders from them. CMC simply makes the case for it more forcefully than anything else, because no other submission concentrates this much interlocking, cross-referenced data into so many tables.
CMC / Module 3 authoring is on our near-term roadmap. Our read is that the reason it has been so hard, for everyone who has tried, has less to do with the writing and more to do with this: getting the same batch, the same impurity and the same limit to read the same way everywhere they appear, and to stay traceable to where they came from. Solving that, rather than the prose, is what we are building CMC around.