Summary
CodeLens version metadata is fragmented across 6 files with 4 different values: 7.2.0, 8.0.0, 8.1, 8.2. There is no single source of truth, and the release process documented in CONTRIBUTING.md (which instructs maintainers to bump version in utils.py, skill.json, and pyproject.toml) is clearly not being followed.
Evidence
| Source |
Value |
Location |
pyproject.toml |
7.2.0 |
L7 version = "7.2.0" |
skill.json |
7.2.0 |
(top-level version field) |
scripts/utils.py |
8.0.0 |
L393 CODELENS_VERSION = "8.0.0" |
README.md |
v8.2 |
L1 # CodeLens v8.2 — AI-Native Code Intelligence |
SKILL-QUICK.md |
v8.2 |
L1 # CodeLens v8.2 — Quick Reference |
SKILL.md |
v8.1 |
L12 # CodeLens v8.1 |
CHANGELOG.md |
[8.2.0] — Unreleased |
L8 (latest released: [8.1.0] — 2026-06-13) |
The actual unreleased version per CHANGELOG is 8.2.0, but:
pyproject.toml / skill.json are stuck at 7.2.0 (two major versions behind).
utils.py (the runtime CODELENS_VERSION constant used by codelens --version and the MCP server's serverInfo.version) is at 8.0.0.
SKILL.md is at 8.1 (one minor behind).
Impact
- MCP clients see wrong version:
initialize response's serverInfo.version reads from utils.CODELENS_VERSION = "8.0.0", but the actual feature set (compact format, graph-schema, git-aware, architecture, hybrid-type-resolver) is 8.2.0-level. Clients that gate behavior on version will mis-route.
- Packaging metadata lies:
pip install codelens (if it ever ships to PyPI) would report 7.2.0 while the code is at 8.2.0.
- CHANGELOG credibility: The
[8.2.0] — Unreleased section advertises features that the version constants don't acknowledge.
- Contributor confusion: New contributors can't tell which file is the source of truth.
Suggested fix
- Single source of truth: Make
scripts/utils.py:CODELENS_VERSION the only authoritative version. Update pyproject.toml and skill.json to read from it (e.g., via a build-time hook in pyproject.toml using dynamic = ["version"] + [tool.setuptools.dynamic] version = {attr = "utils.CODELENS_VERSION"}).
- Bump to
8.2.0: Since CHANGELOG already has [8.2.0] features, set CODELENS_VERSION = "8.2.0" and release.
- Strip hardcoded versions from docs: Replace
# CodeLens v8.2 in README.md / SKILL-QUICK.md / SKILL.md with a placeholder that's regenerated from CODELENS_VERSION (or just remove the version from the H1 — readers can run codelens --version).
- CI guard: Add a test that asserts
pyproject.toml.version == skill.json.version == utils.CODELENS_VERSION, failing CI on any drift.
Files
pyproject.toml (L7)
skill.json
scripts/utils.py (L393)
README.md (L1)
SKILL.md (L12)
SKILL-QUICK.md (L1)
CHANGELOG.md (L8)
tests/test_version_consistency.py (new)
Summary
CodeLens version metadata is fragmented across 6 files with 4 different values:
7.2.0,8.0.0,8.1,8.2. There is no single source of truth, and the release process documented inCONTRIBUTING.md(which instructs maintainers to bump version inutils.py,skill.json, andpyproject.toml) is clearly not being followed.Evidence
pyproject.toml7.2.0version = "7.2.0"skill.json7.2.0versionfield)scripts/utils.py8.0.0CODELENS_VERSION = "8.0.0"README.mdv8.2# CodeLens v8.2 — AI-Native Code IntelligenceSKILL-QUICK.mdv8.2# CodeLens v8.2 — Quick ReferenceSKILL.mdv8.1# CodeLens v8.1CHANGELOG.md[8.2.0] — Unreleased[8.1.0] — 2026-06-13)The actual unreleased version per CHANGELOG is
8.2.0, but:pyproject.toml/skill.jsonare stuck at7.2.0(two major versions behind).utils.py(the runtimeCODELENS_VERSIONconstant used bycodelens --versionand the MCP server'sserverInfo.version) is at8.0.0.SKILL.mdis at8.1(one minor behind).Impact
initializeresponse'sserverInfo.versionreads fromutils.CODELENS_VERSION = "8.0.0", but the actual feature set (compact format, graph-schema, git-aware, architecture, hybrid-type-resolver) is8.2.0-level. Clients that gate behavior on version will mis-route.pip install codelens(if it ever ships to PyPI) would report7.2.0while the code is at8.2.0.[8.2.0] — Unreleasedsection advertises features that the version constants don't acknowledge.Suggested fix
scripts/utils.py:CODELENS_VERSIONthe only authoritative version. Updatepyproject.tomlandskill.jsonto read from it (e.g., via a build-time hook inpyproject.tomlusingdynamic = ["version"]+[tool.setuptools.dynamic] version = {attr = "utils.CODELENS_VERSION"}).8.2.0: Since CHANGELOG already has[8.2.0]features, setCODELENS_VERSION = "8.2.0"and release.# CodeLens v8.2inREADME.md/SKILL-QUICK.md/SKILL.mdwith a placeholder that's regenerated fromCODELENS_VERSION(or just remove the version from the H1 — readers can runcodelens --version).pyproject.toml.version == skill.json.version == utils.CODELENS_VERSION, failing CI on any drift.Files
pyproject.toml(L7)skill.jsonscripts/utils.py(L393)README.md(L1)SKILL.md(L12)SKILL-QUICK.md(L1)CHANGELOG.md(L8)tests/test_version_consistency.py(new)