{"record":{"id":"f11ee429e5d4ddba","repo":"badges/shields","slug":"changesetrevision-not-found","errorCode":null,"errorMessage":"changesetRevision not found","messagePattern":"changesetRevision not found","errorType":"exception","errorClass":"NotFound","httpStatus":404,"severity":"error","filePath":"services/galaxytoolshed/galaxytoolshed-base.js","lineNumber":47,"sourceCode":"  async fetchRepositoryRevisionInstallInfoSchema({\n    repository,\n    owner,\n    changesetRevision,\n  }) {\n    return this._requestJson({\n      schema: repositoryRevisionInstallInfoSchema,\n      url: `${this.constructor.baseUrl}/api/repositories/get_repository_revision_install_info?name=${repository}&owner=${owner}&changeset_revision=${changesetRevision}`,\n    })\n  }\n\n  async fetchLastOrderedInstallableRevisionsSchema({ repository, owner }) {\n    const changesetRevisions =\n      await this.fetchOrderedInstallableRevisionsSchema({\n        repository,\n        owner,\n      })\n    if (!Array.isArray(changesetRevisions) || !changesetRevisions.length) {\n      throw new NotFound({ prettyMessage: 'changesetRevision not found' })\n    }\n    return this.fetchRepositoryRevisionInstallInfoSchema({\n      repository,\n      owner,\n      changesetRevision: changesetRevisions[0],\n    })\n  }\n}\n","sourceCodeStart":29,"sourceCodeEnd":56,"githubUrl":"https://github.com/badges/shields/blob/766fd8bc89a90b8534dc573ab72dec30215ab1ec/services/galaxytoolshed/galaxytoolshed-base.js#L29-L56","documentation":"Thrown by the GalaxyToolshed badge service when the Tool Shed API returns no installable revisions for a repository. The service first fetches the ordered list of installable revisions via fetchOrderedInstallableRevisionsSchema; if the result is not a non-empty array, there is nothing to query revision install info for, so a NotFound is raised with message 'changesetRevision not found'.","triggerScenarios":"Calling the galaxytoolshed revision badge for a repository whose Tool Shed API response contains an empty or missing changeset_revisions list, or when the API returns a non-array (e.g. an error object) for that repository/owner combination.","commonSituations":"Repository name or owner typos in the badge URL; a repository that exists in the Tool Shed but has never had a shippable/revision metadata update so no installable revisions exist; Tool Shed API outages or schema changes returning empty payloads.","solutions":["Verify the repository and owner names exactly match those in the Galaxy Tool Shed UI","Check the repository in the Tool Shed web UI to confirm it has at least one installable revision","Query the Tool Shed API directly (e.g. /api/repos/{owner}/{repo}/ordered_revisions?installable=true) to confirm the payload is non-empty","Retry later if the Tool Shed is having API issues"],"exampleFix":"// before\n/api/galaxytoolshed/dependencies/wrong-owner/my-tool\n// after\n/api/galaxytoolshed/dependencies/bgruening/my-tool","handlingStrategy":"validation","validationCode":"const revs = await fetch(`https://toolshed.g2.bx.psu.edu/api/repos/${owner}/${repo}/ordered_revisions?installable=true`).then(r => r.json());if (!Array.isArray(revs) || revs.length === 0) { console.warn('no installable revisions; skip badge'); }","typeGuard":"const hasRevisions = (v) => Array.isArray(v) && v.length > 0 && typeof v[0] === 'string';","tryCatchPattern":"try { const badge = await getGalaxyToolshedRevisionBadge(repo, owner); } catch (e) { if (e prettyMessage === 'changesetRevision not found') { renderBadge('no installable revisions'); } else { throw e; } }","preventionTips":["Validate owner/repo names against the Tool Shed UI before generating badge URLs","Check the repo has at least one installable revision before embedding badges","Handle 404-style badge responses gracefully in README rendering"],"tags":["galaxytoolshed","not-found","upstream-api"],"backgroundTag":"resource-not-found","analyzedSha":"766fd8bc89a90b8534dc573ab72dec30215ab1ec","analyzedAt":"2026-08-30T01:40:27.499Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}