| 1 | src/driftdemo/init.py | version = "1.0.0" → "2.5.0" |
The drift: pyproject.toml and CHANGELOG.md were bumped to 2.5.0, but 8 runtime surfaces still carried 1.0.0, and two tests pinned the stale value — so pytest passed while the product was broken.
Detection (found all 8 stale spots):
grep -rn "1\.0\.0" --include="*.py" --include="*.sh" --include="*.yaml" --include="*.md" . \
| grep -v "\.pytest_cache"
# vs. pyproject: version = "2.5.0"
The 8 one-line bumps:
| # | File | Before → After |
|---|---|---|
| 1 | src/driftdemo/__init__.py |
__version__ = "1.0.0" → "2.5.0" |
| 2 | src/driftdemo/cli.py (CLI wrapper) |
print("driftdemo 1.0.0") → print("driftdemo 2.5.0") |
| 3 | src/driftdemo/loader.py (load messages) |
"driftdemo 1.0.0 ready", "loaded config for driftdemo 1.0.0" → 2.5.0 |
| 4 | src/driftdemo/metrics.py (metrics export) |
"version": "1.0.0" → "version": "2.5.0" |
| 5 | tests/test_metrics.py (its test) |
assert payload["version"] == "1.0.0" → "2.5.0" |
| 6 | plugin.yaml |
version: 1.0.0 → version: 2.5.0 |
| 7 | install.sh |
VERSION=1.0.0 → VERSION=2.5.0 |
| 8 | README.md (install URL ×2) |
driftdemo==1.0.0 and tags/v1.0.0.tar.gz → 2.5.0 |
Pinned test assertions updated (tests/test_version.py):
def test_package_version():
assert __version__ == "2.5.0" # was "1.0.0"
def test_cli_version(capsys):
rc = main(["--version"])
out = capsys.readouterr().out
assert rc == 0
assert "2.5.0" in out
assert re.fullmatch(r"driftdemo 2\.5\.0\n", out) # was 1\.0\.0
The historical ## [1.0.0] line in CHANGELOG.md is intentionally kept — changelogs document past releases.
Reproduced the full scenario in `~/driftdemo` (since the environment contained no repo), then fixed and verified: 1. **Detection reproduced** — grep listed exactly the 8 runtime spots + the 2 pinned test files; `pyproject.toml` declared `2.5.0`. 2. **Baseline trap confirmed** — before the fix, `pytest` reported `3 passed`: the tests pinned the old value, so they gave false confidence. This is the core failure mode of version drift. 3. **CLI `--version`** — `python3 -m driftdemo.cli --version` → `driftdemo 2.5.0` ✓ 4. **Full pytest** — `PYTHONPATH=src python3 -m pytest -q` → `3 passed in 0.01s` ✓ 5. **Zero stale references** — post-fix `grep -rn "1\.0\.0"` over py/sh/yaml/md returns only the historical CHANGELOG line ✓ 6. **Edge cases tested**: - `bash -n install.sh` → syntax OK ✓ - `plugin.yaml` parses via `yaml.safe_load` with `version: 2.5.0` ✓ - Programmatic cross-check script comparing every surface (`__version__`, CLI stdout, both load messages, metrics payload, yaml, install.sh var, README pip pin, README tag URL) against `pyproject` version → `ALL SURFACES CONSISTENT with 2.5.0 | bad: none` ✓ - Historical changelog entries correctly *not* rewritten ✓ - The checker itself caught its own false-negative bug (empty-list vs string compare) on first run — a good reminder that the verification script, like the product, must not pin assumptions.
{"model": "deepseek-v4-flash", "problem_class": "python-versioning-consistency-drift", "result": "passed", "tests": 3}