{"record":{"id":"a15066c3f32b6ade","repo":"diegosouzapw/OmniRoute","slug":"plugin-name-upgrade-rejected-source-version","errorCode":null,"errorMessage":"Plugin '${name}' upgrade rejected: source version ${manifest.version} is not newer than installed ${existing.version}","messagePattern":"Plugin '(.+?)' upgrade rejected: source version (.+?) is not newer than installed (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/lib/plugins/manager.ts","lineNumber":293,"sourceCode":"        throw new Error(\n          `No valid plugin found in ${sourceDir}: ${errors.map((e) => e.error).join(\", \")}`\n        );\n      }\n      discovered = plugins[0];\n    }\n\n    const { name, manifest } = discovered;\n\n    // Must be already installed\n    if (!pluginExists(name)) {\n      throw new Error(`Plugin '${name}' is not installed — use install() instead`);\n    }\n\n    const existing = getPluginByName(name)!;\n\n    // Source must be strictly newer\n    if (compareSemver(manifest.version, existing.version) <= 0) {\n      throw new Error(\n        `Plugin '${name}' upgrade rejected: source version ${manifest.version} is not newer than installed ${existing.version}`\n      );\n    }\n\n    log.info(\"manager.upgrading\", { name, from: existing.version, to: manifest.version });\n\n    // Deactivate if active before touching files\n    if (existing.status === \"active\") {\n      await this.deactivate(name);\n    }\n\n    // CRITICAL-3: Copy to staging dir first, validate manifest.main, then swap atomically.\n    const destDir = join(this.pluginDir, name);\n    const stagingDir = `${destDir}.staging-${randomUUID()}`;\n    await mkdir(dirname(destDir), { recursive: true });\n    await cp(discovered.pluginDir, stagingDir, { recursive: true });\n\n    try {","sourceCodeStart":275,"sourceCodeEnd":311,"githubUrl":"https://github.com/diegosouzapw/OmniRoute/blob/a179ffed5bb2e0b883b9ae7214ce8717b2a94c4d/src/lib/plugins/manager.ts#L275-L311","documentation":"Error \"Plugin '${name}' upgrade rejected: source version ${manifest.version} is not newer than installed ${existing.version}\" thrown in diegosouzapw/OmniRoute.","triggerScenarios":"Thrown at src/lib/plugins/manager.ts:293 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a179ffed5bb2e0b883b9ae7214ce8717b2a94c4d","analyzedAt":"2026-08-25T18:35:09.898Z","schemaVersion":2},"datasetVersion":"2026-08-25T21:54:21.419Z"}