paperclipai/paperclip · error
Invalid semver comparison: '${left}' vs '${right}'
Error message
Invalid semver comparison: '${left}' vs '${right}' What it means
Internal guard in compareSemver: parseSemver failed on one of the two version strings, so they are not valid semver and cannot be ordered. Usually means a malformed version in a manifest or host version; the non-semver string is at fault.
Source
Thrown at server/src/services/plugin-loader.ts:1015
function compareIdentifiers(left: string, right: string): number {
const leftIsNumeric = /^\d+$/.test(left);
const rightIsNumeric = /^\d+$/.test(right);
if (leftIsNumeric && rightIsNumeric) {
return Number(left) - Number(right);
}
if (leftIsNumeric) return -1;
if (rightIsNumeric) return 1;
return left.localeCompare(right);
}
function compareSemver(left: string, right: string): number {
const leftParsed = parseSemver(left);
const rightParsed = parseSemver(right);
if (!leftParsed || !rightParsed) {
throw new Error(`Invalid semver comparison: '${left}' vs '${right}'`);
}
const coreOrder = (
["major", "minor", "patch"] as const
).map((key) => leftParsed[key] - rightParsed[key]).find((delta) => delta !== 0);
if (coreOrder) {
return coreOrder;
}
if (leftParsed.prerelease.length === 0 && rightParsed.prerelease.length === 0) {
return 0;
}
if (leftParsed.prerelease.length === 0) return 1;
if (rightParsed.prerelease.length === 0) return -1;
const maxLength = Math.max(leftParsed.prerelease.length, rightParsed.prerelease.length);
for (let index = 0; index < maxLength; index += 1) {
const leftId = leftParsed.prerelease[index];View on GitHub (pinned to 120ae5428f)
Solutions
- Fix the malformed semver string(s) in the plugin manifest or host version pin; both sides of the comparison must be valid semver like '1.2.3'.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at server/src/services/plugin-loader.ts:1015 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@120ae5428f (2026-08-18).
Data as JSON: /api/errors/7ef15225ffb0b4cc.
Report an issue: GitHub.