neoclide/coc.nvim · error

${this.def} has no release older than ${releaseAge} days.

Error message

${this.def} has no release older than ${releaseAge} days.

What it means

During getInfo with a positive releaseAge, if the currently resolved latest version is newer than the cutoff (published within the last N days), the installer looks for an older release among the registry's versions. If no version was published before the cutoff, this error is thrown — no release satisfies the 'older than N days' pinning requirement.

Source

Thrown at src/extension/installer.ts:223

    if (this.url) return await this.getInfoFromUri()
    let registry = registryUrl()
    this.log(`Get info from ${registry}`)
    let buffer = await this.fetch(new URL(this.name, registry), { timeout: 10000, buffer: true })
    let res = JSON.parse(buffer.toString())
    let { age: releaseAge, exclude } = releaseAgeConfig()
    if ([...exclude].some(pattern => minimatch(this.name, pattern))) releaseAge = 0
    if (!this.version) {
      this.version = res['dist-tags']['latest']
      if (releaseAge > 0) {
        let cutoff = Date.now() - releaseAge * 24 * 60 * 60 * 1000
        let published = Date.parse(res.time?.[this.version])
        if (!Number.isFinite(published) || published > cutoff) {
          let versions = Object.keys(res.versions ?? {}).filter(version => {
            let published = Date.parse(res.time?.[version])
            return Number.isFinite(published) && published <= cutoff
          })
          this.version = semver.maxSatisfying(versions, '*') ?? undefined
          if (!this.version) throw new Error(`${this.def} has no release older than ${releaseAge} days.`)
        }
      }
    } else if (releaseAge > 0) {
      let published = Date.parse(res.time?.[this.version])
      let cutoff = Date.now() - releaseAge * 24 * 60 * 60 * 1000
      if (!Number.isFinite(published) || published > cutoff) {
        throw new Error(`${this.def} is not older than ${releaseAge} days.`)
      }
    }
    let obj = res['versions'][this.version]
    if (!obj) throw new Error(`${this.def} doesn't exists in ${registry}.`)
    let requiredVersion = obj['engines'] && obj['engines']['coc']
    if (!requiredVersion) throw new Error(`${this.def} is not a valid coc extension, "engines" field with coc property required.`)
    extensionPath(this.root, res.name)
    return {
      'dist.tarball': obj['dist']['tarball'],
      'engines.coc': requiredVersion,
      version: obj['version'],

View on GitHub (pinned to 50e974d969)

Solutions

  1. Lower or remove the releaseAge requirement so recent versions are accepted.
  2. Wait until the extension has a release older than the required number of days.
  3. Verify registry metadata includes accurate 'time' entries per version.
  4. Check the local clock; a wrong system date shifts the cutoff.

Example fix

// before
let info = await installer.getInfo() // releaseAge=30, ext published 2 days ago -> throws
// after
installer.releaseAge = 0 // or omit pinning, accept the latest release
let info = await installer.getInfo()
Defensive patterns

Strategy: retry

Validate before calling

const published = Date.parse(registryRes.time?.[version])
const ageDays = (Date.now() - published) / 86400000
if (!(ageDays > releaseAge)) {
  // no release satisfies the pinning constraint; disable releaseAge or wait
}

Try / catch

try {
  await installer.getInfo()
} catch (e) {
  if (e.message.includes('has no release older than')) {
    installer.releaseAge = 0 // retry accepting latest
    await installer.getInfo()
  } else throw e
}

Prevention

When it happens

Trigger: Info/install with releaseAge > 0 (e.g. pinned/paired install semantics) where the extension's registry metadata shows every published version is newer than releaseAge days — common for brand-new extensions or right after a first release.

Common situations: Installing a freshly published extension with a staleness policy; registry 'time' metadata missing or unparseable (Number.isFinite false) making all versions appear unqualified; time-travel/clock issues on the machine.

Related errors


AI-assisted analysis of neoclide/coc.nvim@50e974d969 (2026-08-31). Data as JSON: /api/errors/0ef322433573f44b. Report an issue: GitHub.