You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Shared developer-tool pins are currently checked and propagated by several scheduled surfaces: .github/workflows/maint-auto-update-pypi-versions.yml:11-15,45-141, .github/workflows/maint-50-tool-version-check.yml:6-9,43-149, Maint 52, and maint-sync-env-from-pyproject.yml. The repository documentation in docs/ci/TOOL_VERSION_MANAGEMENT.md still describes a partly manual Maint 50 flow even though a daily updater can open source PRs.
This is a current churn source: the same upstream version movement can be detected, commented on, proposed, and propagated by different workflows before the canonical source state settles. That creates extra source PRs, consumer waves, and agent decisions.
Scope
Choose one canonical source-update lane for Workflows-owned dev-tool pins, batch routine releases into a predictable window, and make Maint 52 propagation-only. Preserve immediate handling for explicitly security-sensitive updates.
Non-goals
Do not allow consumer repos to own partial bumps of Workflows-managed pins.
Do not weaken lockfile reproducibility or compatibility testing.
Do not combine product/runtime dependency policy with the shared dev-tool policy.
Do not count schedule edits or documentation-only scaffolding as delivery without a mismatch fixture that exercises the canonical-source and propagation contract.
Implementation tasks
Define the canonical pin set and owner across .github/workflows/autofix-versions.env, pyproject.toml, consumer/integration template env files, and requirements.lock.
Refactor .github/workflows/maint-auto-update-pypi-versions.yml into the sole source proposal lane with a weekly batch window and a documented security override.
Remove duplicate upstream-version proposal/comment behavior from .github/workflows/maint-50-tool-version-check.yml; retain only a bounded policy/freshness audit if it adds unique evidence.
Make .github/workflows/maint-52-sync-dev-versions.yml propagation-only: it must consume a settled canonical source commit and must not independently decide newer versions.
Keep .github/workflows/maint-sync-env-from-pyproject.yml as a deterministic source-consistency check or replace it with a named equivalent; prevent it from racing the source proposal lane.
Group routine ruff, black, mypy, pytest, pytest-cov, pytest-xdist, coverage, isort, and docformatter changes into one bounded source PR per window.
Update docs/ci/TOOL_VERSION_MANAGEMENT.md, docs/ops/CONSUMER_REPO_MAINTENANCE.md, and contributor guidance with ownership, cadence, emergency handling, and supersession rules.
Close or explicitly supersede overlapping dependency-bot PRs only after the canonical source proposal or merged source commit exists.
Acceptance criteria
tests/workflows/test_maint52_sync_dev_versions_pr_body.py proves Maint 52 reports the canonical source commit and never proposes an upstream version independently.
tests/workflows/test_sync_dev_dependencies.py proves env, pyproject, template, and lockfile pins move together for every managed tool.
A new policy test proves one weekly source proposal can contain multiple routine tool updates and that a security fixture bypasses the window without bypassing tests.
Maint 50 and the source updater cannot open or comment competing proposals for the same canonical delta.
Consumer propagation starts only after canonical source validation succeeds and creates at most one current wave per repo.
Deliberate-break test: introduce one mismatched managed-tool pin in a template or lockfile, verify the named consistency test fails with the exact path/tool, then revert and verify it passes.
Run python scripts/dev_check.py --action test and the workflow-validation suite successfully.
Delivery notes
This issue should land after the ownership exclusions in #2876 so consumer Renovate cannot reintroduce partial shared-tool bumps while the source lane is being consolidated.
Why
Shared developer-tool pins are currently checked and propagated by several scheduled surfaces:
.github/workflows/maint-auto-update-pypi-versions.yml:11-15,45-141,.github/workflows/maint-50-tool-version-check.yml:6-9,43-149, Maint 52, andmaint-sync-env-from-pyproject.yml. The repository documentation indocs/ci/TOOL_VERSION_MANAGEMENT.mdstill describes a partly manual Maint 50 flow even though a daily updater can open source PRs.This is a current churn source: the same upstream version movement can be detected, commented on, proposed, and propagated by different workflows before the canonical source state settles. That creates extra source PRs, consumer waves, and agent decisions.
Scope
Choose one canonical source-update lane for Workflows-owned dev-tool pins, batch routine releases into a predictable window, and make Maint 52 propagation-only. Preserve immediate handling for explicitly security-sensitive updates.
Non-goals
Implementation tasks
.github/workflows/autofix-versions.env,pyproject.toml, consumer/integration template env files, andrequirements.lock..github/workflows/maint-auto-update-pypi-versions.ymlinto the sole source proposal lane with a weekly batch window and a documented security override..github/workflows/maint-50-tool-version-check.yml; retain only a bounded policy/freshness audit if it adds unique evidence..github/workflows/maint-52-sync-dev-versions.ymlpropagation-only: it must consume a settled canonical source commit and must not independently decide newer versions..github/workflows/maint-sync-env-from-pyproject.ymlas a deterministic source-consistency check or replace it with a named equivalent; prevent it from racing the source proposal lane.docs/ci/TOOL_VERSION_MANAGEMENT.md,docs/ops/CONSUMER_REPO_MAINTENANCE.md, and contributor guidance with ownership, cadence, emergency handling, and supersession rules.Acceptance criteria
tests/workflows/test_maint52_sync_dev_versions_pr_body.pyproves Maint 52 reports the canonical source commit and never proposes an upstream version independently.tests/workflows/test_sync_dev_dependencies.pyproves env, pyproject, template, and lockfile pins move together for every managed tool.python scripts/dev_check.py --action testand the workflow-validation suite successfully.Delivery notes
This issue should land after the ownership exclusions in #2876 so consumer Renovate cannot reintroduce partial shared-tool bumps while the source lane is being consolidated.