Problem
parseSemver and compareSemver are implemented independently in 3 locations:
src/validation.ts (canonical, 973-line file)
src/runners/cc-agents-discovery.ts (local copy, 218-line file)
src/commands/update.ts (local parseSemver, different isNewer wrapper)
Impact
Fix
- Extract to
src/utils/semver.ts
- Re-export from
validation.ts for backward compat
- All consumers import from
src/utils/semver.ts
Scope
Low risk, no behavior change. Tech-debt cleanup.
Discovered during
Code quality sweep on src/runners/ (pre-#3180 audit).
Problem
parseSemverandcompareSemverare implemented independently in 3 locations:src/validation.ts(canonical, 973-line file)src/runners/cc-agents-discovery.ts(local copy, 218-line file)src/commands/update.ts(localparseSemver, differentisNewerwrapper)Impact
Fix
src/utils/semver.tsvalidation.tsfor backward compatsrc/utils/semver.tsScope
Low risk, no behavior change. Tech-debt cleanup.
Discovered during
Code quality sweep on
src/runners/(pre-#3180 audit).