{"record":{"id":"4d3626b2534251de","repo":"ruvnet/ruflo","slug":"invalid-version-format-currentversion","errorCode":null,"errorMessage":"Invalid version format: ${currentVersion}","messagePattern":"Invalid version format: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/deployment/src/release-manager.ts","lineNumber":156,"sourceCode":"\n    } catch (error) {\n      result.error = error instanceof Error ? error.message : String(error);\n      return result;\n    }\n  }\n\n  /**\n   * Bump version based on type\n   */\n  private bumpVersion(\n    currentVersion: string,\n    bumpType: VersionBumpType,\n    channel: string\n  ): string {\n    const versionMatch = currentVersion.match(/^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([a-z]+)\\.(\\d+))?$/);\n\n    if (!versionMatch) {\n      throw new Error(`Invalid version format: ${currentVersion}`);\n    }\n\n    let [, major, minor, patch, prerelease, prereleaseNum] = versionMatch;\n    let newMajor = parseInt(major);\n    let newMinor = parseInt(minor);\n    let newPatch = parseInt(patch);\n    let newPrerelease: string | undefined = prerelease;\n    let newPrereleaseNum = prereleaseNum ? parseInt(prereleaseNum) : 0;\n\n    switch (bumpType) {\n      case 'major':\n        newMajor++;\n        newMinor = 0;\n        newPatch = 0;\n        newPrerelease = undefined;\n        break;\n\n      case 'minor':","sourceCodeStart":138,"sourceCodeEnd":174,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/deployment/src/release-manager.ts#L138-L174","documentation":"bumpVersion() only accepts versions matching ^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([a-z]+)\\.(\\d+))?$: plain X.Y.Z, or X.Y.Z followed by a single lowercase-only prerelease word and a number (1.2.3-beta.1). It rejects v-prefixes, two-part versions, uppercase or hyphenated prerelease identifiers, extra prerelease segments, and build metadata.","triggerScenarios":"prepareRelease() without an explicit version option while package.json version is '0.0.0', 'v1.2.3', '1.2', '1.2.3-RC.1', '1.2.3-alpha-1', '1.2.3-alpha.1.2', or '1.2.3-beta+build.1'.","commonSituations":"Monorepo placeholder versions like '0.0.0-dev' or '0.0.0-use.local'; versions written by other tooling with v-prefix or build metadata; prerelease channels named with uppercase or hyphens ('RC', 'pre-release').","solutions":["Set pkg.version to a supported form: 1.2.3 or 1.2.3-beta.1 (lowercase letters only in the prerelease word, exactly one dot-number, no build metadata)","Or pass an explicit version: '1.2.4' to prepareRelease() so the existing string is never parsed","If you need richer semver, compute the new version yourself with a proper semver library and pass it in"],"exampleFix":"// before\n// package.json: \"version\": \"0.0.0-use.local\"\nawait manager.prepareRelease({ bumpType: 'patch' }); // throws: Invalid version format\n\n// after\n// package.json: \"version\": \"0.1.0\"\nawait manager.prepareRelease({ bumpType: 'patch' });","handlingStrategy":"validation","validationCode":"const SUPPORTED_VERSION = /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([a-z]+)\\.(\\d+))?$/;\nfunction isBumpableVersion(v: string): boolean {\n  return SUPPORTED_VERSION.test(v);\n}\nconst pkg = JSON.parse(readFileSync('package.json', 'utf8'));\nif (!isBumpableVersion(pkg.version)) {\n  throw new Error(`version ${pkg.version} must be X.Y.Z or X.Y.Z-word.N`);\n}","typeGuard":"function isBumpableVersion(v: unknown): v is string {\n  return typeof v === 'string' && /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([a-z]+)\\.(\\d+))?$/.test(v);\n}","tryCatchPattern":null,"preventionTips":["Keep package.json versions in X.Y.Z or X.Y.Z-lowercase.N form","Pass an explicit version to prepareRelease() when the stored version is a placeholder"],"tags":["semver","versioning","release","regex"],"backgroundTag":"invalid-semver-version","analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}