Why
renovate-presets/fleet.json:4-35 applies the shared preset to Workflows and every consumer but contains no boundary for overwrite-managed consumer paths. The manifest currently declares .github/workflows/agents-guard.yml and .github/workflows/maint-76-claude-code-review.yml as centrally copied files (.github/sync-manifest.yml:109-126), yet consumer Renovate opened PRs that changed only those paths (for example Inv-Man-Intake#838 and Manager-Database#1347); those PRs were later closed unmerged. This is a current productivity break: the dependency bot independently edits files that Maint 68 will replace from Workflows.
Scope
- Derive the consumer-side Renovate exclusion rule from overwrite-managed entries in
.github/sync-manifest.yml.
- Keep Renovate enabled for canonical Workflows source files and for consumer-owned/create-only workflow files.
- Publish the generated rule as a reusable preset consumed by
renovate-presets/fleet.json.
- Add a contract test that fails when a new overwrite-managed path is visible to consumer Renovate.
Non-Goals
- Do not blanket-ignore
.github/workflows/**; ci.yml, autofix.yml, and create-only/bootstrap surfaces can be repo-owned.
- Do not disable Renovate in Workflows or for runtime dependency files.
- Do not change Maint 68 copy semantics or consumer exceptions in this issue.
- Scaffold-only completion does NOT count: adding an unused preset or a test fixture that is not derived from the live manifest fails this issue.
Tasks
Acceptance Criteria
Implementation Notes
- Current baseline:
main@5084eb7d55047491e71745a2a534a8530893bff6.
- Relevant files:
.github/sync-manifest.yml, renovate-presets/fleet.json, renovate.json, scripts/sync_manifest_compiler.py, scripts/list_registered_consumer_repos.py, scripts/dev_check.sh, tests/workflows/test_dependency_bot_conditions.py, tests/workflows/test_sync_manifest_delivery.py, and docs/ops/CONSUMER_REPO_MAINTENANCE.md.
- Preserve the distinction between overwrite-managed, create-only, skipped, and runtime-fetched entries.
- Validate the generated JSON with the Renovate schema/config validator in addition to pytest.
Why
renovate-presets/fleet.json:4-35applies the shared preset to Workflows and every consumer but contains no boundary for overwrite-managed consumer paths. The manifest currently declares.github/workflows/agents-guard.ymland.github/workflows/maint-76-claude-code-review.ymlas centrally copied files (.github/sync-manifest.yml:109-126), yet consumer Renovate opened PRs that changed only those paths (for example Inv-Man-Intake#838 and Manager-Database#1347); those PRs were later closed unmerged. This is a current productivity break: the dependency bot independently edits files that Maint 68 will replace from Workflows.Scope
.github/sync-manifest.yml.renovate-presets/fleet.json.Non-Goals
.github/workflows/**;ci.yml,autofix.yml, and create-only/bootstrap surfaces can be repo-owned.Tasks
scripts/generate_consumer_renovate_ownership.pyto compile overwrite-managed target paths and registered consumer repositories from.github/sync-manifest.ymlplusscripts/list_registered_consumer_repos.py.renovate-presets/consumer-managed-paths.jsonwith a package rule that disables dependency extraction only when both the repository and manifest-managed target match.renovate-presets/fleet.jsonto consume the generated ownership preset while leaving the Workflows repository outside the consumer-only match.tests/scripts/test_generate_consumer_renovate_ownership.pycovering exact-file, directory,skip_repos,overwrite_repos, andsync_mode: create_onlybehavior.tests/workflows/test_dependency_bot_conditions.pysoagents-guard.ymlandmaint-76-claude-code-review.ymlare excluded in consumers whileci.ymlandautofix.ymlremain eligible.docs/ops/CONSUMER_REPO_MAINTENANCE.mdanddocs/ci/TOOL_VERSION_MANAGEMENT.mdwith the Renovate-versus-Maint-68 ownership contract and regeneration command.scripts/dev_check.shso a stale generated preset fails local and CI validation.Acceptance Criteria
python -m pytest tests/scripts/test_generate_consumer_renovate_ownership.py tests/workflows/test_dependency_bot_conditions.py -qpasses and reads the real.github/sync-manifest.yml.agents-guard.ymlandmaint-76-claude-code-review.ymlin registered consumers, but not for those source files instranske/Workflows.ci.ymlandautofix.ymlremain visible to Renovate.python scripts/generate_consumer_renovate_ownership.py --checkexits zero on the committed preset and non-zero after any managed-path drift.agents-guard.ymlmanifest entry or alter its generated rule;tests/scripts/test_generate_consumer_renovate_ownership.py::test_manifest_managed_workflows_are_disabled_for_consumersmust fail. Restore the manifest/preset before requesting review.Implementation Notes
main@5084eb7d55047491e71745a2a534a8530893bff6..github/sync-manifest.yml,renovate-presets/fleet.json,renovate.json,scripts/sync_manifest_compiler.py,scripts/list_registered_consumer_repos.py,scripts/dev_check.sh,tests/workflows/test_dependency_bot_conditions.py,tests/workflows/test_sync_manifest_delivery.py, anddocs/ops/CONSUMER_REPO_MAINTENANCE.md.