Skip to content

build_readme() fails with pak subprocess error after 2.5.0 upgrade #2697

@EllaKaye

Description

@EllaKaye

I've run into the follow issue while developing the jugglr package, and tried to debug it with Claude Code. I asked Claude Code to write the following report, based on the context, what it's tried, and what it's discovered. This is what it says...

Problem

Since upgrading to devtools 2.5.x, build_readme() fails with a pak subprocess error:

! error in pak subprocess
Caused by error in `seq.default(grps[start] + 1, grps[start + 1] - 1)`:
! 'from' must be of length 1

The same error is triggered by pak::meta_clean(force = TRUE), confirming the issue is in the pak subprocess itself, not the rendering step.

Reprex

devtools::build_readme()

The package in question has no Bioconductor dependencies. Its Imports are: cli, dplyr, ggplot2, marquee, purrr, rlang, S7, stringr.

Workaround

devtools::install(quick = TRUE)
rmarkdown::render("README.Rmd", output_format = "github_document")

This bypasses the pak dependency-checking step entirely and works correctly.

Investigation

The error originates from the switch to pak in 2.5.0. The call chain is:

build_readme()
  → build_rmd_impl()
    → local_install()
      → pkg_dep_status()
        → pak::local_dev_deps()   # ← pak subprocess spawned here

Before 2.5.0, this used remotes::install_deps() directly; no subprocess was involved.

Tracing the error: the grps[start] pattern in seq.default(grps[start] + 1, grps[start + 1] - 1) appears at line 192 of remotes/install-github.R, inside get_version_map(). This function fetches and parses the Bioconductor YAML config to resolve the R/Bioc version map. It fails when grep("r_ver_for_bioc_ver", txt) returns character(0) — which happens if the YAML fetch returns empty content — causing match() to return integer(0), making grps[start] an empty vector and seq() error.

However, pak does not bundle remotes. It bundles pkgcache, which handles its own Bioconductor metadata fetching (confirmed: pkgcache is actively populating BioCann, BioCbooks, BioCexp, BioCsoft, BioCworkflows directories in its metadata cache). Since pkgcache is stored as compiled bytecode (.rdb/.rdx) rather than source, its internals can't be grepped — but it almost certainly contains the same get_version_map-style code path.

Further diagnostics:

  • getOption("repos") in the IDE session shows only CRAN — no Bioconductor repos configured
  • .libPaths() is normal (user library + system library)
  • Wiping the entire pkgcache directory (unlink(tools::R_user_dir("pkgcache", "cache"), recursive = TRUE)) does not resolve the error
  • Running pak::local_dev_deps(".") from a terminal R session succeeds

Network access from the pak subprocess is confirmed to work — running the following from the IDE session successfully returns the first lines of the Bioconductor YAML:

callr::r(function() {
  readLines(url("https://bioconductor.org/config.yaml"), n = 5)
})

This rules out network connectivity as the cause. The root cause remains unidentified. It is likely in pkgcache's compiled bytecode (stored as .rdb/.rdx, not greppable source), which almost certainly contains the same get_version_map-style code path triggered under conditions specific to the Positron subprocess environment.

Environment

devtools 2.5.2
pak 0.9.5
remotes 2.5.0
R 4.5 (arm64, macOS Darwin 25.2.0)
IDE: Positron
Positron Version: 2026.05.2 build 3
Code - OSS Version: 1.109.2
Commit: 1b5dfba9314510340cb08f2fedccc5ffba822beb
Date: 2026-05-13T18:53:45.115Z
Electron: 39.3.0
Chromium: 142.0.7444.265
Node.js: 22.21.1
V8: 14.2.231.22-electron.0
OS: Darwin arm64 25.2.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions