{"record":{"id":"0ef322433573f44b","repo":"neoclide/coc.nvim","slug":"this-def-has-no-release-older-than-releaseage","errorCode":null,"errorMessage":"${this.def} has no release older than ${releaseAge} days.","messagePattern":"(.+?) has no release older than (.+?) days\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/extension/installer.ts","lineNumber":223,"sourceCode":"    if (this.url) return await this.getInfoFromUri()\n    let registry = registryUrl()\n    this.log(`Get info from ${registry}`)\n    let buffer = await this.fetch(new URL(this.name, registry), { timeout: 10000, buffer: true })\n    let res = JSON.parse(buffer.toString())\n    let { age: releaseAge, exclude } = releaseAgeConfig()\n    if ([...exclude].some(pattern => minimatch(this.name, pattern))) releaseAge = 0\n    if (!this.version) {\n      this.version = res['dist-tags']['latest']\n      if (releaseAge > 0) {\n        let cutoff = Date.now() - releaseAge * 24 * 60 * 60 * 1000\n        let published = Date.parse(res.time?.[this.version])\n        if (!Number.isFinite(published) || published > cutoff) {\n          let versions = Object.keys(res.versions ?? {}).filter(version => {\n            let published = Date.parse(res.time?.[version])\n            return Number.isFinite(published) && published <= cutoff\n          })\n          this.version = semver.maxSatisfying(versions, '*') ?? undefined\n          if (!this.version) throw new Error(`${this.def} has no release older than ${releaseAge} days.`)\n        }\n      }\n    } else if (releaseAge > 0) {\n      let published = Date.parse(res.time?.[this.version])\n      let cutoff = Date.now() - releaseAge * 24 * 60 * 60 * 1000\n      if (!Number.isFinite(published) || published > cutoff) {\n        throw new Error(`${this.def} is not older than ${releaseAge} days.`)\n      }\n    }\n    let obj = res['versions'][this.version]\n    if (!obj) throw new Error(`${this.def} doesn't exists in ${registry}.`)\n    let requiredVersion = obj['engines'] && obj['engines']['coc']\n    if (!requiredVersion) throw new Error(`${this.def} is not a valid coc extension, \"engines\" field with coc property required.`)\n    extensionPath(this.root, res.name)\n    return {\n      'dist.tarball': obj['dist']['tarball'],\n      'engines.coc': requiredVersion,\n      version: obj['version'],","sourceCodeStart":205,"sourceCodeEnd":241,"githubUrl":"https://github.com/neoclide/coc.nvim/blob/50e974d9692461a69147d5cab146a8d3e439abe4/src/extension/installer.ts#L205-L241","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Lower or remove the releaseAge requirement so recent versions are accepted.","Wait until the extension has a release older than the required number of days.","Verify registry metadata includes accurate 'time' entries per version.","Check the local clock; a wrong system date shifts the cutoff."],"exampleFix":"// before\nlet info = await installer.getInfo() // releaseAge=30, ext published 2 days ago -> throws\n// after\ninstaller.releaseAge = 0 // or omit pinning, accept the latest release\nlet info = await installer.getInfo()","handlingStrategy":"retry","validationCode":"const published = Date.parse(registryRes.time?.[version])\nconst ageDays = (Date.now() - published) / 86400000\nif (!(ageDays > releaseAge)) {\n  // no release satisfies the pinning constraint; disable releaseAge or wait\n}","typeGuard":null,"tryCatchPattern":"try {\n  await installer.getInfo()\n} catch (e) {\n  if (e.message.includes('has no release older than')) {\n    installer.releaseAge = 0 // retry accepting latest\n    await installer.getInfo()\n  } else throw e\n}","preventionTips":["Check the registry 'time' field before applying a releaseAge policy.","Set releaseAge=0 for newly published extensions.","Keep the system clock synchronized."],"tags":["registry","npm","versioning","pinned-install"],"backgroundTag":"no-release-matching-constraint","analyzedSha":"50e974d9692461a69147d5cab146a8d3e439abe4","analyzedAt":"2026-08-31T11:17:23.966Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}