Repository navigation
Description
This tracks downstream updates identified during reverse-dependency checks against development S7. The PRs are grouped by the changes they contain; packages can appear in several categories.
Avoid conflicting := imports
S7 now exports :=. Packages importing it from both S7 and rlang or data.table get an import-replacement warning.
These patches retain S7’s operator and exclude the rlang or data.table placeholder. For example:
#' @import S7
#' @import rlang, except = ":="
NULLThe same applies to data.table. Existing uses of := inside tidy evaluation or data.table expressions continue to work.
PRs: ale, apa7, ellmer, GGally, joinery, rtemis, rtemis.a3, rtemis.core, rtemis.llm, shinyOAuth.
Use S7’s package lifecycle hooks
The patches adopt the current package hooks:
S7_on_load()registers methods when the package loads.S7_on_build()removes temporary bindings left by method registration, so calls to imported generics still find the original functions. It runs at the top level, after method declarations.S7_on_unload()cleans up S7 method registrations and dependency hooks when the package unloads.
The build hook directly fixes failures in packages such as btw, filtro, mighty.metadata, and mixtime, where imported functions were left bound to registration placeholders. Other packages receive the lifecycle updates alongside their compatibility fixes; each hook addition does not represent a separate revdep failure.
Packages retaining support for older S7 guard the new hooks and keep methods_register() as the load fallback.
PRs: ale, apa7, bidsr, btw, caugi, cohortBuilder, deltapif, ellmer, filtro, GGally, ggarrow, ggdiagram, gglogger, ggpath, ggplot2, GitAI, imply, joinery, marquee, medfit, mighty.metadata, mixtime, myTAI, nflplotR, rtemis, rtemis.a3, rtemis.core, rtemis.draw, rtemis.llm, S7schema, shinychat, shinyfilters, shinyOAuth, statim, vecvec.
Update constructors and inherited properties
Several custom constructors pass a class definition or an unrelated S7_object() as their parent. These patches construct an instance of the declared parent instead. Other changes pass the parent positionally to accommodate the renamed new_object() argument, or name arguments when forwarding them through generated constructors.
PRs: bidsr, btw, caugi, cohortBuilder, deltapif, ggarrow, ggdiagram, ggpath, mighty.metadata, rtemis.a3, S7schema.
Related property changes:
- dcmstan uses getter-only inherited properties and generated constructors. The parent initializes and validates the model identifier; the child makes it read-only afterward.
- ggpath stores image dimensions in
image_size, avoiding a conflict with the inherited numericsizeproperty. - rtemis preserves the parent’s declared property type when reconstructing inherited runtime properties from a schema.
Quote complex property defaults
S7 now warns about complex values supplied directly as property defaults. These patches supply the expression that constructs the value, for example:
default <- quote(c(0, 1))This keeps the expression in the generated constructor and evaluates it for each new object. Plain scalars and empty vectors without attributes can still be supplied directly.
Property factories in bidsr and rtemis also need to preserve the quoted expression while using its evaluated value for validation or metadata.
PRs: bidsr, ellmer, filtro, mixtime, rtemis, rtemis.core, rtemis.draw, shinyOAuth.
Other compatibility changes
| Change | Packages and PRs |
|---|---|
Check whether an object is S7 explicitly. S7_class() now describes ordinary R objects too, so a non-NULL result no longer identifies an S7 object. |
shinyfilters, statim |
| Capture the original operand expression under updated method dispatch, preserving useful error messages and replayable logs. | ggplot2, gglogger |
| Use public method discovery and lookup APIs. Store calendar membership on unit instances and preserve it through reconstruction; the arithmetic graph algorithms remain unchanged. | mixtime |
Match the dispatch dimensions of base [[ and $ generics. |
bidsr |
| Register property unions with S4 before registering the classes that use them. | imply, medfit; PFIM patch (submission pending) |
| Handle shared S7 class definitions in coverage instrumentation and serialization. | covr, typedjson |
Use S7_data() to extract underlying image data, and update a test that assumed it removed the parent S3 class. |
imply, ggplot2 |
| Match constructor documentation to generated arguments and defaults. | ellmer, myTAI, nflplotR, shinychat |
| Preserve array dimensions during replacement and resolve callbacks in the correct evaluation context. | vecvec |
| Supply model configuration in mocked chat fixtures. | GitAI |
| Add a missing S7 namespace import. | marquee |
Existing upstream work and submission order
measr PR #90 already covers its constructor documentation and lifecycle updates, so no separate PR is planned. The dcmstan patch builds on its maintainer’s merged S7 updates.
Some patches depend on others: ggpath precedes nflplotR, S7schema precedes mighty.metadata, and rtemis.core precedes its dependents.
The PFIM patch is available as a diff against the read-only cran/PFIM mirror. Submission to the package maintainers is still pending.
Downstream PR status
For easier tracking, here is the complete list of downstream PRs. GitHub displays each PR’s current state.
- Avoid import warnings and update S7 package hooks tripartio/ale#45
- Avoid import warnings and update S7 package hooks wjschne/apa7#2
- Fix BIDS method registration and constructors with development S7 dipterix/bidsr#1
- Fix context construction and generic bindings with development S7 posit-dev/btw#240
- fix: fix export constructors for development S7 frederikfabriciusbjerre/caugi#344
- Fix filter construction with development S7 r-world-devs/cohortBuilder#89
- Cover callbacks in S7 shared class definitions r-lib/covr#646
- Simplify read-only model identifiers r-dcm/dcmstan#23
- Construct PIF parent instances with development S7 RodrigoZepeda/deltapif#2
- Avoid S7 import and constructor documentation warnings tidyverse/ellmer#1181
- Restore installed scoring generics with development S7 tidymodels/filtro#183
- Avoid import warnings and update S7 package hooks ggobi/ggally#578
- Update S7 arrow construction and package hooks teunbrand/ggarrow#20
- Restore S7 compatibility and update package hooks wjschne/ggdiagram#9
- fix: preserve logged expressions and update S7 (v0.2.2.9000) package hooks pwwang/gglogger#2
- Preserve image units and update S7 package hooks mrcaseb/ggpath#25
- Preserve operand expressions and update S7 package hooks tidyverse/ggplot2#6914
- Declare compatibility names in the S7 class hierarchy tidyverse/ggplot2#6915
- Return bare lists from S7 list conversion tidyverse/ggplot2#6916
- Restore mocked chat initialization and S7 lifecycle hooks r-world-devs/GitAI#118
- Restore array conversion and S4 registration with development S7 jonclayden/imply#1
- Avoid := import warnings with development S7 edubruell/joinery#1
- Declare S7 imports and update package hooks r-lib/marquee#107
- Register nullable property unions before S4 classes Data-Wise/medfit#214
- fix: metadata construction and exports with development S7 NovoNordisk-OpenSource/mighty.metadata#73
- Preserve calendar membership and use S7's public method API mitchelloharawild/mixtime#105
- Update constructor documentation and S7 package hooks drostlab/myTAI#80
- Update constructor documentation and S7 package hooks nflverse/nflplotR#98
- Use explicit property defaults with development S7 rtemis-org/rtemis#206
- Fix metadata construction and S7 imports rtemis-org/a3#20
- Update imports and property defaults for S7 compatibility rtemis-org/rtemis.core#28
- Quote chart coordinate defaults for S7 compatibility rtemis-org/draw#21
- Avoid := import warnings with development S7 rtemis-org/llm#19
- fix: configuration construction with development S7 NovoNordisk-OpenSource/S7schema#80
- Update constructor documentation and S7 package hooks posit-dev/shinychat#429
- fix: preserve ordinary list dispatch with development S7 joshwlivingston/shinyfilters#153
- Avoid import and signing-algorithm default warnings with development S7 lukakoning/shinyOAuth#23
- Fix formula dispatch with development S7 s7-stats/statim#27
- Preserve shared S7 classes through JSON round trips nbenn/typedjson#120
- Preserve array shape and resolve callbacks before S7 access mitchelloharawild/vecvec#30
Activity
t-kalinowski commentedon Oct 16, 2026
Opened three PRs for ggplot2:
With all three changes applied, the full ggplot2 test suite passes against both released S7 0.2.2 and development S7.
hadley commentedon Oct 17, 2026
Do we want to pick a release date (maybe Nov 16?) so we can give folks a concrete timeline?
(Thanks for doing all this work! Hopefully AI did most of the PRs for you)
t-kalinowski commentedon Nov 2, 2026
Thanks, @hadley! I'm planning to submit S7 1.0.0 to CRAN on November 16. I've notified maintainers on all 41 linked downstream PRs; eight packages already have the updates on CRAN.