{"record":{"id":"5895cdd9a9239527","repo":"neoclide/coc.nvim","slug":"this-def-is-not-older-than-releaseage-days","errorCode":null,"errorMessage":"${this.def} is not older than ${releaseAge} days.","messagePattern":"(.+?) is not older than (.+?) days\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/extension/installer.ts","lineNumber":230,"sourceCode":"    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'],\n      name: res.name\n    } as Info\n  }\n\n  public async getInfoFromUri(): Promise<Info> {\n    let { url } = this\n    let repository: URL","sourceCodeStart":212,"sourceCodeEnd":248,"githubUrl":"https://github.com/neoclide/coc.nvim/blob/50e974d9692461a69147d5cab146a8d3e439abe4/src/extension/installer.ts#L212-L248","documentation":"getInfo enforces a minimum release age: when releaseAge > 0, the resolved version must have been published before the cutoff (older than releaseAge days). If its publish time is missing/invalid or too recent, the installer throws this error. It exists to avoid installing versions that are too new (stability/pinning policies).","triggerScenarios":"getInfo (via info) with a version whose res.time[version] parses to a date after cutoff — i.e. the pinned/current version was published within the last releaseAge days, or its timestamp is missing entirely.","commonSituations":"Extensions that publish very frequently; registry missing time entries for the version; system clock set far in the past making cutoff later than publish dates; user configured a large releaseAge (e.g. 90 days) against fast-moving extensions.","solutions":["Reduce the releaseAge setting (or set it to 0) to allow recent releases.","Pin an explicit older version that satisfies the age requirement.","Fix the system clock if the local date is wrong.","Verify registry 'time' data for the version; a missing timestamp always triggers this."],"exampleFix":"// before\nlet info = await installer.getInfo() // releaseAge=90, version published 10 days ago -> throws\n// after\ninstaller.releaseAge = 7 // allow releases older than 7 days\nlet info = await installer.getInfo()","handlingStrategy":"validation","validationCode":"const published = Date.parse(registryRes.time?.[version])\nconst cutoff = Date.now() - releaseAge * 24 * 60 * 60 * 1000\nif (!Number.isFinite(published) || published > cutoff) {\n  // version too new or missing timestamp; pin an older version or drop releaseAge\n}","typeGuard":null,"tryCatchPattern":"try {\n  await installer.getInfo()\n} catch (e) {\n  if (e.message.includes('is not older than')) {\n    installer.releaseAge = 0\n    await installer.getInfo() // accept the recent release\n  } else throw e\n}","preventionTips":["Use small releaseAge values with fast-moving extensions.","Pin explicit older versions when staleness matters.","Verify registry 'time' metadata exists for the target version.","Keep the system clock correct so the cutoff is meaningful."],"tags":["registry","npm","versioning","pinned-install"],"backgroundTag":"release-too-recent","analyzedSha":"50e974d9692461a69147d5cab146a8d3e439abe4","analyzedAt":"2026-08-31T11:17:23.966Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}