{"slug": "typescript-never-ships-x-y-0-classifying-releases-the-way-projects-actually", "title": "TypeScript never ships x.y.0: classifying releases the way projects actually version", "summary": "A developer has built a release-tracking tool that classifies software versions per project rather than applying a single SemVer rule, using strategies for semver, Node's LTS cadence, TypeScript's non-SemVer numbering, and 0.x libraries. Each strategy is a pure TypeScript function tested against real npm and GitHub version histories, with manual overrides stored in a database. The project is in public preview and plans to add AI-generated release summaries grounded only in official release notes.", "body_md": "I'm building a tracker that tells developers which releases of their stack actually matter.\n\nThe first problem wasn't AI or scraping. It was a deceptively simple question:\n\n**Given a version string, how important is this release?**\n\nThe naive rule: `x.0.0` is a major, `x.y.0` is a minor, everything else is a patch.\n\nIt holds for many libraries, and breaks for some of the most popular ones.\n\nI ended up with one *classification strategy* per project, mapping a version\n\nto one of four buckets: **Spotlight** (you should look), **Latest** (new stuff),\n\n**Digest** (patches, batched weekly) and **Preview** (beta and rc).\n\n`semver`: the default\n`x.0.0` → Spotlight, `x.y.0` → Latest, patches → Digest. Vite fits perfectly:\n\nafter 8.0.0 came 16 patches, 8.0.1 through 8.0.16, in under three months.\n\nA good tracker shows you 8.0.0 and quietly folds the rest into a digest.\n\n`node`: even majors become LTS\nNode's even majors (20, 22, 24) become Long Term Support; odd ones don't.\n\nSo an even `x.0.0` goes to Spotlight, while odd majors and `x.y.0` go to Latest.\n\nSame version shape, different meaning.\n\n`typescript`: there is no stable x.y.0\nTypeScript doesn't follow SemVer: every `x.y` can contain breaking changes.\n\nAnd the numbering is unusual:\n\n```\n5.9.0-beta → 5.9.1-rc → 5.9.2   ← first stable 5.9\n```\n\nA rule that looks for `x.y.0` would never flag TypeScript 5.9 at all.\n\nSo the strategy is: **the first stable version of each `x.y` that the sources observed is Spotlight**;\n\nlater ones are Digest. The strategy has to look at history, not just the string.\n\n`zerover`: in 0.x the minor breaks\nFor libraries still in `0.x`, `0.y.0` is effectively a major.\n\nSo `0.y.0` → Spotlight, other `0.y.z` → Digest, and from `1.0.0` on it falls back to `semver`.\n\nEvery strategy treats pre-releases the same way. Only suffixes that are exactly\n\n`beta` or `rc` (optionally numbered, like `-rc.1`) count as previews.\n\nCanary, nightly, experimental, alpha and hash- or date-stamped builds\n\n(`-rc.0-next-…`) aren't tracked at all. They're the bulk of the noise.\n\nEach strategy is a pure TypeScript function, with no I/O,\n\ntested against real version histories from npm and GitHub.\n\nReal data catches what toy examples don't: TypeScript's `.2`, React's\n\n`-rc.0-next-<hash>` tags, `v`-prefixed tags.\n\nAnd when a rule is still wrong for an edge case, a manual override lives\n\nin the database and is never overwritten by the next sync.\n\nClassification decides *what deserves your attention*. The next step decides\n\n*what to do about it*: an AI summary of each important release, with breaking changes,\n\nmigration steps and an explicit **Action required / Safe to upgrade** verdict.\n\nIt will be grounded only in the official release notes. If they don't mention\n\na breaking change, neither will the summary.\n\nYou can see the classification at work on an early preview:\n\n[Vite's release page](https://release-tracker-drab.vercel.app/technologies/vite): 8.0.0 up front,\n\nthe 16 patches folded into a digest. Name and domain are still provisional.\n\nI'm building this in public. If your stack has a versioning scheme that would\n\nbreak these rules, I'd love to hear about it in the comments.", "url": "https://wpnews.pro/news/typescript-never-ships-x-y-0-classifying-releases-the-way-projects-actually", "canonical_source": "https://dev.to/robzepdev/typescript-never-ships-xy0-classifying-releases-the-way-projects-actually-version-56a", "published_at": "2026-09-22 14:13:13+00:00", "updated_at": "2026-09-22 14:23:00.065508+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools"], "entities": ["TypeScript", "Node.js", "Vite", "React", "npm", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/typescript-never-ships-x-y-0-classifying-releases-the-way-projects-actually", "markdown": "https://wpnews.pro/news/typescript-never-ships-x-y-0-classifying-releases-the-way-projects-actually.md", "text": "https://wpnews.pro/news/typescript-never-ships-x-y-0-classifying-releases-the-way-projects-actually.txt", "jsonld": "https://wpnews.pro/news/typescript-never-ships-x-y-0-classifying-releases-the-way-projects-actually.jsonld"}}