v0.1.0 — early prototype
The first release of open.csr — an open-source Clinical Study Report builder. This is an early prototype, and it is labelled as one: it demonstrates a closed loop end to end on real public data, and it is not yet something you would put a submission through.
The idea
Every CSR tool in the field breaks at the same seam: prose quotes numbers the authoring tool did not compute. Open source owns number generation and stops at the output object; commercial tools own document assembly and treat the TFL package as an opaque input. Both sides then sell cross-checking as a feature.
open.csr closes the loop instead. A change request becomes a spec edit, which regenerates the number, which updates the sentence — as one versioned transaction. Consistency is a build property, not a QC activity.
What v0.1 has
An ARD-first engine. {cards} → owned ard.json with a provenance envelope (data hash, spec hash, package versions, git commit) → {gt} displays. Six displays on {pharmaverseadam} CDISCPILOT01: disposition, demographics, exposure, AE overview, AEs by SOC/PT, and an SAE listing.
Prose that binds numbers rather than stating them. 14 ICH E3 text blocks in three tiers. Every number is a {{ard:…}} binding resolved at assembly, and a numeric-fidelity gate fails the build on any digit in rendered prose that did not come from one. Agent-drafted blocks stay out of the report until a human approves them — four are being held out right now, and the build says so.
A machine-readable ICH E3 model. All 119 sections as data, with 14.x display numbers derived from assembly order rather than authored, so reordering the report is a one-line diff and a display's identity never changes.
A demo application. One surface with a study explorer — documents, displays, text, and a document's own sections — a live provenance readout in the header, and a trace panel that answers, for any number: which dataset, which spec, which ARD row, which display, which sentence.
Published quality evidence. 252 vitest + 70 testthat tests, 220 reviewed requirements, requirement-traced evidence pages, and drift guards that fail the build when a committed artifact stops telling the truth.
Two findings worth reading
The webR spike — the real pipeline runs in the browser under WebAssembly and is numerically exact: 3,665 statistics across six displays, zero differences against the committed ARDs, despite a two-minor-version jump in the statistical engine. But repo.r-wasm.org is a rolling snapshot with no pinning, so ARD value equality holds while ARD snapshot equality breaks. The browser previews; CI commits.
The layout record — three application layouts, the decision, and a section recording where the first recommendation was wrong and why.
What it is not
No submission-format RTF output, no figures, no efficacy displays (CDISCPILOT01 ships no efficacy ADaM), and no way to change the report from the browser yet. docs/NEXT_STEPS.md is current on all of it.
Data is the public CDISC Pilot 01 study via pharmaverseadam. Apache-2.0.