| name | r-pkg-cran-checklist |
| description | CRAN submission checklist. |
| user-invocable | true |
| allowed-tools | ["Read","Edit","Write","Bash"] |
r-pkg-cran-checklist
Walks through the standard items CRAN expects before accepting a package
submission or update. This skill doesn't duplicate the mechanics of a full
check or a NEWS entry โ it points at r-pkg-check and r-pkg-news for
those sub-steps and covers everything else.
Why this exists: nothing in the repo tracked the CRAN-specific items
beyond a plain package check โ version bump discipline, cran-comments.md,
reverse-dependency checks, and the win-builder/rhub cross-platform checks
CRAN's own submission form expects an answer about.
Procedure
Work through each item; don't submit until every one is checked.
-
Clean R CMD check --as-cran. Run the
r-pkg-check skill, using
devtools::check(args = "--as-cran") as the invocation (that skill notes
this variant for CRAN submissions), and resolve every NOTE, WARNING, and
ERROR it reports โ CRAN's own submission processing runs this exact check
and rejects anything short of clean or fully-explained.
-
Version bump. Confirm DESCRIPTION's Version: field increased
from the last version CRAN has (check
https://cran.r-project.org/package=<pkg> or
available.packages()["<pkg>", "Version"]), following semantic
versioning appropriate to the change (patch for a fix, minor for a new
feature, major for a breaking change).
-
NEWS.md entry. Confirm an entry exists for the version being
submitted, under a heading matching that version. Use
r-pkg-news to draft one if it's missing.
-
cran-comments.md. Confirm the package root has a
cran-comments.md (CRAN's expected file for submission notes) stating:
- The R versions and platforms checked (typically via
devtools::check()
locally, devtools::check_win_devel()/check_win_release() for
win-builder, and rhub::rhub_check() for cross-platform checks).
- Any remaining NOTEs and why they're expected/harmless (e.g. "This is a
new submission" or a known false-positive spelling flag).
- A
## Downstream dependencies section, even if just "There are
currently no downstream dependencies for this package" โ required for
every submission, not just ones with revdeps.
-
win-builder and r-hub checks. Run (or confirm recently run):
devtools::check_win_devel()
devtools::check_win_release()
rhub::rhub_check()
These catch platform-specific failures (Windows path handling, Solaris/
macOS compiler differences) that a local check on one platform can't.
Wait for the emailed/posted results before submitting if they were just
triggered โ they run asynchronously.
-
Reverse-dependency checks. If the package has downstream dependents
(check https://cran.r-project.org/package=<pkg> "Reverse dependencies"
or run tools::package_dependencies(<pkg>, reverse = TRUE)), run their
checks against this version (revdepcheck::revdep_check()) and report
any new failures to their maintainers before submitting, per CRAN policy.
Skip this step only if there truly are no reverse dependencies โ state
that explicitly in cran-comments.md either way (step 4).
-
Submit via devtools::release() (interactive, walks through a final
confirmation of the above) or the CRAN web form at
https://cran.r-project.org/submit.html, attaching the built tarball
from devtools::build().
Related
r-pkg-check โ the full-check sub-step (item 1).
r-pkg-news โ the NEWS.md entry sub-step (item 3).
r-pkg-spellcheck โ run before this
checklist so documentation and NEWS.md text are clean going in.
cran-extrachecks --- the ad-hoc/stylistic checks (Title case, @return tags, URL hygiene) this checklist does not cover.
Run both for a CRAN submission.