Conversation
… tracks
renovate.json filters freedesktop-sdk tags with
"extractVersion": "^freedesktop-sdk-(?<version>25\\.08\\.[0-9]+)$"
while elements/freedesktop-sdk.bst has tracked 26.08 since the bump to
freedesktop-sdk-26.08.0-0-gdb97cce:
track: freedesktop-sdk-26.08*
ref: freedesktop-sdk-26.08.0-0-gdb97cce32cecadc7a3e98f06d557ebfa6ba9ad46
No tag upstream publishes can match that rule any more, so Renovate reports
no updates rather than an error. The junction silently stops receiving bumps
and the track-refs job in build.yml never has a ref to resolve. Nothing in
any log says so — the failure looks exactly like "already up to date".
Bumps the rule to 26.08, and adds check-renovate-series.py so the pair cannot
drift apart again: it reads the series out of each junction's `track:` glob
and asserts the matching extractVersion is anchored to the same one, failing
closed. Same shape as check-release-version.py and check-k0s-version.py —
wired into .pre-commit-config.yaml, and unit-tests.yml now also fires on
renovate.json and elements/*.bst so the guard runs when either side moves.
tests/unit/test_check_renovate_series.py covers the passing case, the exact
regression above, a junction with no packageRule, a junction with no
`track:`, the two series helpers, and the checked-in tree itself.
$ python3 -m pytest tests/unit -q
207 passed, 1 xfailed in 0.64s
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VwEniffvKGH7gHfqKneuaJ
Independent verification — the bug is real, the guard is non-vacuousI can't approve this (same account authored it), so recording the verification instead. Everything below I ran myself rather than taking the description's word for it. The mismatch is real, confirmed against the actual element: # elements/freedesktop-sdk.bst
track: freedesktop-sdk-26.08*
ref: freedesktop-sdk-26.08.0-0-gdb97cce32cecadc7a3e98f06d557ebfa6ba9ad46against The description's framing of the failure mode is the important part and it's correct: an The guard actually catches it. I reintroduced the Clean tree: And it's wired to fire. The
One thing to flag before mergingThe checker is reachable from pre-commit and from the test suite, but not from @castrojo @mrbobbytables — this is clean and needs no approval to merge under current protection, but it's Claude-authored end to end and nobody has reviewed it. Worth a human glance before it lands rather than merging on the strength of its own test suite. The Generated by Claude Code |
The bug
renovate.jsonfilters freedesktop-sdk tags with a rule anchored to the 25.08 series:elements/freedesktop-sdk.bsthas been on 26.08 since the bump tofreedesktop-sdk-26.08.0-0-gdb97cce:No tag upstream publishes can satisfy that rule any more. Renovate does not error on an
extractVersionthat matches nothing — it reports no updates. So the junction has silently stopped receiving bump PRs, and thetrack-refsjob inbuild.ymlnever gets a ref to resolve. The failure mode is indistinguishable from "already up to date", which is why it is easy to miss.The fix
Bump the rule to 26.08, and stop the two from drifting again.
.github/scripts/check-renovate-series.pyreads the series out of each junction'strack:glob and asserts the matchingextractVersionis anchored to the same series, failing closed:It is deliberately built in the same shape as
check-release-version.pyandcheck-k0s-version.py— a single invariant, a docstring explaining the silent failure it prevents, fail-closed, no dependencies beyond the stdlib. Wired into.pre-commit-config.yamlnext to the other two, andunit-tests.ymlnow also triggers onrenovate.jsonandelements/*.bstso the guard actually runs when either side of the invariant moves.The gnome-build-meta rule already agrees with its junction (
track: gnome-50/^(?<version>50\.[0-9]+)$) and is unchanged; the check now holds it there.Tests
tests/unit/test_check_renovate_series.pycovers the passing case, the exact regression above, a junction with nopackageRule, a junction with notrack:, both series helpers, and the checked-in tree itself so drift fails CI rather than only pre-commit.Note on scope
I came at this from a sibling BuildStream image repo and only touched the Renovate invariant. One thing I noticed but deliberately left alone:
just show-me-the-futureandjust install-vmgive you a real QEMU install-and-reboot test, and no workflow calls either, somainhas no automated boot gate. Happy to wire that up as a separate PR if it would be welcome.🤖 Generated with Claude Code
https://claude.ai/code/session_01VwEniffvKGH7gHfqKneuaJ