You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Follow-up to #1, which proposes and gets a decision on adopting R-universe. The registry is live and the packages that matter most are already building and installable from the universe. This issue is about the remaining work that actually changes how people build on OSP: making the universe the standard channel for resolving dependencies between OSP packages, and for downstream packages that depend on the stack. It does not re-argue the decision (see #1).
The agreed constraint from #1 holds: R-universe is additional. publish.yml keeps cutting GitHub releases and binaries as today; the universe builds on top of those releases and becomes the channel for dependency resolution, not a replacement for releases.
Where we are (2026-07-21)
The core stack is green and installable from the universe today: rSharp, ospsuite.utils, tlf, ospsuite, ospsuite.plots (plus ospsuite.globalsensitivity). The main historical blocker (rSharp's .onLoad() hard-erroring without a .NET runtime) is resolved: Open-Systems-Pharmacology/rSharp#224 and Open-Systems-Pharmacology/OSPSuite-R#1991 are merged.
That is enough for the common case. The steps below are what turn it into the standard way OSP packages resolve each other.
Steps that matter
Ordered so the stack is never left in a broken state: every step is additive (both the existing Remotes: chain and the universe keep working) until the last step, by which point every consumer can already resolve from the universe.
Agree the canonical mechanism and the dev-build story up front, so the changes below all aim at the same target. For released builds the goal is universe-on-repos / Additional_repositories with no Remotes: field, instead of the Remotes: ...@*release GitHub chain. Dev-against-dev is a temporary state that adds a Remotes: entry + an Imports version floor, exactly the pattern the R Packages book prescribes for depending on the development version of a package (a Remotes: entry plus a floor only the dev build satisfies, as made by usethis::use_dev_package()). Because OSP dev builds pin each other, going dev on one package pulls the connected dev set: document this as the intended dev workflow, not a bug. The concrete DESCRIPTION states (released, dev-against-sibling, released again) and the two OSP caveats are worked out in the comment below.
Land Expose an extra-repositories input in R-CMD-check workflows / setup-r-env Workflows#242, which adds an extra-repositories input to R-CMD-check-build.yaml / setup-r-env. This must come before switching CI to the universe: the reusable workflow currently exposes no such input, so without it the universe route is not reachable through that workflow.
In each package's GitHub Actions, add the universe to repos (via the new extra-repositories input, or extra-repositories: on r-lib/actions/setup-r for packages not using the reusable workflow). Purely additive: CI can now resolve OSP dependencies as universe binaries/source while the Remotes: chain still works too. This also sidesteps the flaky multi-layer GitHub GraphQL resolution.
In each OSP package that depends on other OSP packages, declare Additional_repositories: https://open-systems-pharmacology.r-universe.dev in DESCRIPTION so R CMD check and source installs resolve siblings from the universe. Also additive, and it coexists with any existing Remotes: field.
Once CI and DESCRIPTION on every package can reach the universe (the two steps above), retire the OSP-to-OSP Remotes: chain for released builds, making the universe the canonical resolution channel. Safe only at this point, because nothing still depends on the Remotes: chain to find its siblings.
Update each package README with the two install paths, released as the primary one. Released version from the universe with plain base R (binaries, no extra tooling):
Development version from GitHub with pak (kept for dev installs, where you want the unreleased build rather than the universe's released one):
pak::pak("Open-Systems-Pharmacology/OSPSuite-R")
Keep the existing GitHub-release install path documented as still supported.
Document the runtime gotcha for downstream maintainers: installing is not running, the .NET runtime is a separate machine prerequisite. Note the OSP reusable workflow already installs .NET (via setup-r-env), so this only bites CI that does not use it (e.g. a plain r-lib/actions setup on macOS runners, which ship no .NET by default).
Reference
The downstream-install behavior was validated with a minimal throwaway package (Imports: ospsuite, ospsuite.plots, universe declared in Additional_repositories): https://github.com/Felixmil/dummyosp. Its README has runnable snippets, a provenance check, and the platform/runtime and dependency-resolution findings that back the steps above.
Wire OSP dependency resolution through R-universe
Follow-up to #1, which proposes and gets a decision on adopting R-universe. The registry is live and the packages that matter most are already building and installable from the universe. This issue is about the remaining work that actually changes how people build on OSP: making the universe the standard channel for resolving dependencies between OSP packages, and for downstream packages that depend on the stack. It does not re-argue the decision (see #1).
The agreed constraint from #1 holds: R-universe is additional.
publish.ymlkeeps cutting GitHub releases and binaries as today; the universe builds on top of those releases and becomes the channel for dependency resolution, not a replacement for releases.Where we are (2026-07-21)
The core stack is green and installable from the universe today:
rSharp,ospsuite.utils,tlf,ospsuite,ospsuite.plots(plusospsuite.globalsensitivity). The main historical blocker (rSharp's.onLoad()hard-erroring without a .NET runtime) is resolved: Open-Systems-Pharmacology/rSharp#224 and Open-Systems-Pharmacology/OSPSuite-R#1991 are merged.That is enough for the common case. The steps below are what turn it into the standard way OSP packages resolve each other.
Steps that matter
Ordered so the stack is never left in a broken state: every step is additive (both the existing
Remotes:chain and the universe keep working) until the last step, by which point every consumer can already resolve from the universe.repos/Additional_repositorieswith noRemotes:field, instead of theRemotes: ...@*releaseGitHub chain. Dev-against-dev is a temporary state that adds aRemotes:entry + anImportsversion floor, exactly the pattern the R Packages book prescribes for depending on the development version of a package (aRemotes:entry plus a floor only the dev build satisfies, as made byusethis::use_dev_package()). Because OSP dev builds pin each other, going dev on one package pulls the connected dev set: document this as the intended dev workflow, not a bug. The concreteDESCRIPTIONstates (released, dev-against-sibling, released again) and the two OSP caveats are worked out in the comment below.extra-repositoriesinput toR-CMD-check-build.yaml/setup-r-env. This must come before switching CI to the universe: the reusable workflow currently exposes no such input, so without it the universe route is not reachable through that workflow.repos(via the newextra-repositoriesinput, orextra-repositories:onr-lib/actions/setup-rfor packages not using the reusable workflow). Purely additive: CI can now resolve OSP dependencies as universe binaries/source while theRemotes:chain still works too. This also sidesteps the flaky multi-layer GitHub GraphQL resolution.Additional_repositories: https://open-systems-pharmacology.r-universe.devinDESCRIPTIONsoR CMD checkand source installs resolve siblings from the universe. Also additive, and it coexists with any existingRemotes:field.DESCRIPTIONon every package can reach the universe (the two steps above), retire the OSP-to-OSPRemotes:chain for released builds, making the universe the canonical resolution channel. Safe only at this point, because nothing still depends on theRemotes:chain to find its siblings.pak(kept for dev installs, where you want the unreleased build rather than the universe's released one):setup-r-env), so this only bites CI that does not use it (e.g. a plainr-lib/actionssetup on macOS runners, which ship no .NET by default).Reference
The downstream-install behavior was validated with a minimal throwaway package (
Imports: ospsuite, ospsuite.plots, universe declared inAdditional_repositories): https://github.com/Felixmil/dummyosp. Its README has runnable snippets, a provenance check, and the platform/runtime and dependency-resolution findings that back the steps above.