Downstream packaging plans
This content is for 2025. Switch to the latest version for up-to-date documentation.
Packaging for shell, notebook, R, Julia, SAS-adjacent, batch-system, C#, Go, Power Platform, and the TypeScript/WASM browser demo stays thin and contract driven. None of these surfaces should duplicate calculator formulas.
Rules:
- Shell scripts and notebook cells should call the shared CLI, write or read files at the boundary, and keep any local transformation limited to orchestration.
- Notebook examples should use synthetic fixture data and document the file names, working directory, and CLI command that produced each result.
- R should start with a thin wrapper over the shared CLI plus CSV file exchange, with Arrow/Parquet deferred until the shared file contract exists.
- R should evaluate
extendrwhen native Rust integration is justified by fixture-backed parity and stable ownership boundaries. - R Markdown and Quarto examples should use synthetic fixture data and read back shared outputs only.
- Keep the R surface wrapper-only; do not reimplement formulas, adjustment logic, or validation rules in R.
- Treat CRAN packaging as deferred until the install posture, dependency checks, and package skeleton are stable.
- Julia should start with a thin CLI/file wrapper, using CSV for the executable
prototype and
DataFrames.jlplusArrow.jlaround the target interchange workflow once the shared Arrow contract exists. Treat C ABI,ccall, andjlrsas later options only if native embedding becomes necessary. - Julia should evaluate
jlrsor accallwrapper only after fixture parity and the Rust core boundary are stable. - SAS-adjacent workflows should stay file based and external-process driven. Use them for importing fixtures, calling the shared CLI, and exporting outputs, not for reimplementing calculator rules inside SAS code.
- C ABI consumers should use a stable C boundary or a secured service boundary. Any native integration must document ownership, allocator responsibilities, and error translation before it is embedded in an institution’s runtime.
- C# should prefer a stable ABI or secured service boundary.
- Go should prefer a C ABI wrapper or secured service boundary.
- Power Platform should use a custom connector or service boundary only.
- Batch systems should treat the shared CLI as the execution unit and pass input and output files through scheduler-managed storage or object storage rather than embedding formula logic in job steps.
- The TypeScript/WASM browser demo should stay synthetic, browser-only, and wrapper-only. Use WASM as the runtime target, keep Node limited to build and developer tooling, and keep browser bundle size under a practical demo budget.
- Browser privacy limits apply: do not treat the client as a trusted data store, do not cache patient-level data, and keep any telemetry synthetic only.
- Keep all formula and validation logic in the shared engine; do not duplicate calculator rules in TypeScript just to make the browser demo easier.
- For any downstream surface that reads or writes files, prefer the current CSV contract for executable examples and the Arrow/Parquet target for the shared interchange roadmap. Use explicit schemas and column names so the files remain compatible across runtimes.
- Capture diagnostics and provenance alongside every batch run: record the CLI version, file hashes or source identifiers, input file name, output file name, and any validation warnings that were emitted.
- Keep privacy rules consistent across all wrappers: do not store patient-level data in browser caches, notebook outputs, or ad hoc local artifacts beyond the minimum needed to run the job.
- Release readiness depends on shared fixture parity, stable contract versioning, and repeatable cross-runtime validation evidence.
- Release readiness depends on shared fixture parity, stable contract versioning, and Arrow-boundary consistency across all downstream surfaces.
- For C ABI consumers, keep fixture parity with the shared engine, preserve Arrow as the boundary for tabular exchange where possible, and avoid formula duplication in the native wrapper.
See the CLI/file interop tutorial in tutorials/cli-file-interop.
See also the C ABI consumer guide in tutorials/c-abi-consumers.
See the canonical source in Conductor downstream-packaging-plans.md.