Date: 2026-08-19 Status: Draft for review Supersedes: ROADMAP.md milestones M6 (Replication Dashboard) and M7 (Authoring Foundation) as written; the “no backend” and “no server-side compute” architecture principles; the browser-execution strategy (TS engine + WebR) as the product’s execution layer.
Interlyse pivots from a browser-executed specification explorer to a cloud verification service for empirical research. Replication packages execute in containers running real R (and licensed Stata) on rented infrastructure. The parser/DAG stack — the project’s genuinely novel asset — is repurposed from execution engine to evidence layer: the thing that makes a verification report legible, auditable, and clickable down to source.
The product is certification, not compute. In an era where any author can ask an AI agent to run their package in a sandbox, the durable value is a third party’s signed, structured, reproducible verdict: these models ran, these numbers match the printed tables, here is the lineage. Every roadmap decision is checked against “does this make the signature more trusted?”, not “does this run more code?”
Why now, in one sentence each:
A paper’s empirical results, continuously verified — from data to code to tables to manuscript.
| Stage | Ships | Buyer / motion |
|---|---|---|
| V1 — Runner + Report | Containerized execution (R, then Stata), environment reconstruction, instrumented trace, scorecard + evidence DAG, printed-value matching, signed certificate. Free gallery of reproduced published papers. | Authors, self-serve pre-flight (“pass the data editor on the first try”). Gallery = marketing. |
| V1.5 — Manuscript loop | Table generation + Overleaf/git sync; result matching against LaTeX we generate. Nothing in the manuscript is ever stale. | Authors, subscription. Converts one-shot verification into a recurring relationship. |
| V2 — Programmatic | Public HTTP API + MCP server (replicate,
get_dag, run_spec,
verify_tables); GitHub push triggers;
credentials-passthrough data resolvers (FRED/IPUMS/WRDS with the user’s
own keys); exportable verifier for restricted-data enclaves. |
AI agents, institutions with restricted data. |
| V2.5 — Exploration | Fork/clone a gallery paper; robustness-on-demand (server-side spec sweeps rendered with the existing spec-curve machinery). | Referees, discussants, researchers. The growth engine. |
| Journals (parallel track) | Same report, institutional billing, editorial-workflow integration. Sold from V1 usage evidence, never load-bearing for survival. | Data editors at journals without in-house teams. |
Full reasoning lives in the 2026-08-19 strategy conversation; the load-bearing facts:
renv.lock when present;
otherwise solve for a working vintage (package census from
library() calls → PPM snapshot nearest the paper’s date →
bisect on failure). Every report embeds the resolved manifest — this is
both reproducibility metadata and the moat’s unglamorous half.The container executes the author’s code verbatim in
real R. We inject a shim that shadows/traces estimation and output
functions (lm, glm, feols,
felm, ivreg, lm_robust,
fixest family,
stargazer/modelsummary/etable,
ggsave, file writers). Each traced call emits one JSONL
record: call text + span-locatable source position, resolved formula,
broom::tidy() coefficients/SEs, N, vcov type, data
fingerprint (dims + column hash), output file if any. Stata: wrapper ado
+ log parsing capturing e(b)/e(V) after
estimation commands.
Consequences:
feols call inside any
loop/lapply/paste0 contraption is captured
when it fires, with ground-truth arguments. Loop
expansion, paste-folding, .SD forms, the bounded expression
evaluator — all become optional enrichment. The ~250-item TS-semantics
backlog is closed, not paused.AnalysisCall, Span, React Flow
rendering, grouping/comparison-table/spec-curve components. Drop: typed
ports as an execution contract, the executor, worker protocol, WebR
dispatch.Match targets, in priority order per paper:
output/paper/tables/*.tex, logs) — deterministic LaTeX
parsing; machine-generated stargazer/esttab output is regular.Extracted values persist as structured gold files with provenance
(the existing replicate-*-gold.json convention, extended
with extraction provenance). Matching = tolerance-aware diff of traced
coefficients/SEs/N against gold, rendered as the scorecard: X of
Y scripts executed · M of N models matched printed values · per-cell
green/amber/red with drill-down to the evidence DAG.
A report is an immutable, signed JSON artifact + rendered view: run summary, environment manifest, model inventory, match scorecard, evidence DAG, blockers list (the run-status playbook’s punch list, machine-generated). Certificates: content-hash of report + our signature; DOI-able for gallery entries; badge embeddable by authors. The existing React app becomes the report viewer + gallery; accounts/billing/job-status are the new UI surface (managed auth + Stripe; build nothing custom).
In: R-language packages end-to-end (upload →
reconstruct → run → trace → match → report → certificate); Fly Machines
orchestration; instrumentation shim for the estimation/output functions
listed in §4.2; env reconstruction with PPM snapshots; match engine
paths 1–2 (deposit .tex, user-supplied manuscript); gallery
seeded with the existing 10 replicate papers + expansion
toward ~50 open-data papers (LLM-assisted curation, path 3); self-serve
accounts + Stripe; signed reports.
Out (deliberately): Stata execution (R4, fast-follow — licensing is solved, the wrapper ado is the work); Overleaf sync (V1.5); API/MCP (V2); fork/robustness (V2.5); any TS-side execution work; PDF parsing as a runtime feature; journal-specific workflow integration.
Build sequence:
| Phase | Deliverable | Validation |
|---|---|---|
| R1 — Runner MVP | Container + shim + trace + env reconstruction; report JSON (no UI polish); works headless via CLI | The 10 replicate corpus papers run end-to-end; traced
coefficients match the existing gold files |
| R2 — Match + report UI | Match engine (paths 1–2), evidence DAG view, scorecard, signed immutable reports | ≥ 25 gallery papers with green scorecards; blockers list auto-generated matches hand-written run-status entries on overlap |
| R3 — Self-serve launch | Accounts, billing, upload flow, gallery public, certificates/badges | First external pre-flight run completes without founder intervention; gallery ≥ 50 papers |
| R4 — Stata | docker-stata images + wrapper ado trace + Stata recognizer (annotation-grade) | ≥ 3 Stata-primary corpus papers reproduce printed values |
Pricing hypothesis at R3 launch (to be tested, not defended): gallery free; pre-flight $249/run or $499 until-you-pass bundle, certificate included.
| Asset | Disposition |
|---|---|
R lexer/parser/AST, AnalysisCall, Span,
recognizer |
Keep — annotation/enrichment layer; coverage bar drops from “complete” to “good” |
| DAG rendering, grouping, comparison tables, spec curve, LaTeX export | Keep — report UI now; robustness product later |
| Run-status corpus (142 entries), audit CLI, gold-file conventions, playbook | Keep/repurpose — gallery seed, regression corpus for the report generator, machine-generated-blockers spec |
| TS stats engine (regression, 2SLS, GLM, demean, sandwich…) | Freeze — keep passing tests, accept no new work; becomes an in-browser demo/preview nicety, never a correctness path |
| WebR stack (dispatcher, marshalers, VFS bridge, RData extraction) | Freeze — demo tech; no new marshalers |
TS-semantics backlog (~250 items: .SD variants,
frollmean, evaluator ops, …) |
Close — mark BACKLOG sections superseded by this spec, do not delete history |
| PDF layout parsing plan (old M6) | Drop |
| Bidirectional code↔︎DAG sync (old vision / M7) | Drop as foundation; fork-time “generate a code patch” may return in V2.5 |
| “No backend / static CDN / no server-side compute” principles | Rescinded by this spec |
New no-go list (additions): no reimplementation of R/Stata semantics for execution — instrumentation only; no storage or redistribution of restricted data; no custom auth/billing/orchestration where a managed service exists; no journal sales dependency for survival; no unsigned or mutable reports.
| Risk | Mitigation |
|---|---|
| Agent commoditization of “running code” | Certification framing from R1: signed immutable reports, badge registry, curated gold corpus. Sell the signature. |
| Refine expands from prose to code | Speed + wedge focus; their editorial position also makes them a natural partner/acquirer. |
| I4R’s free AI Replication Engine | Partner, don’t fight: offer the runner as their tooling; their corpus and credibility seed the gallery. |
| Tiny beachhead TAM | The ladder (V1.5 manuscript loop, V2.5 robustness, adjacent fields) is mandatory roadmap, not option value. |
| Operational gravity (service, not site) | Managed everything; delete-after-run default minimizes data liability; scale-to-zero keeps idle cost ~$0. |
| Gallery skews to open-data papers | Stated honestly on the gallery; exportable verifier (V2) turns the restriction into a product. |
| Env reconstruction rabbit holes | Time-box per paper during seeding; “could not reconstruct” is itself a valid, honest report outcome. |