ci: check the preset the way the INHERITED path reads it, not only as repo config - #11
Merged
Merged
Conversation
… repo config
On 2026-09-03 a preset change stopped Renovate on all 117 organisations, and
this lane was green throughout.
config.js sets inheritConfig, so Renovate reads default.json through
validateConfig('inherit', ...) -- a different validator from the one step 3
runs, and stricter, because it does NOT apply the migration a preset gets. A
plain string `description` is legal in a preset and rejected when inherited:
Configuration option `description` should be a list (Array)
Configuration option `packageRules[0].description` should be a list (Array)
Renovate then opens "Action Required: Fix Renovate Configuration" on every
repository in the organisation and stops producing updates there.
Step 3 passed the whole time because it validates default.json as REPO config
-- the shape Renovate no longer reads it in. Nothing else noticed either: a
per-repository config error is an ISSUE, not a failed job, so the Renovate
workflow run reported success while every repository it touched was refusing
its own configuration.
Step 4b checks the one rule that has actually bitten. Step 4c is its self-test,
built on a config shaped exactly like the one that caused the outage -- the
same reason step 4 exists for step 3: a check whose subject quietly stops being
checked is worse than no check, because it turns an absence into assurance.
Verified both directions before rollout by extracting the two `run:` bodies
exactly as YAML de-indents them and executing them: green on a real
default.json, and red on that file with its descriptions turned back into
strings, naming every offending field. actionlint clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
On 2026-09-03 a preset change stopped Renovate on all 117 organisations and this lane was green throughout.
config.jssetsinheritConfig, so Renovate readsdefault.jsonthroughvalidateConfig('inherit', …)— stricter than step 3's validator, because it does not apply the migration a preset gets. A plain stringdescriptionis legal in a preset and rejected when inherited, and Renovate then opens "Action Required: Fix Renovate Configuration" on every repository here and stops producing updates.Step 3 passed throughout because it validates
default.jsonas repo config — the shape Renovate no longer reads it in. Nothing else noticed either: a per-repository config error is an issue, not a failed job.Step 4b checks the rule that actually bit. Step 4c is its self-test, on a config shaped exactly like the one that caused the outage.
🤖 Generated with Claude Code