refactor(adr): ADR-0004 → per-template Renovate baselines (Model B)#8
Merged
Merged
Conversation
Pre-propagation in-place amendment. The decision (Renovate over
Dependabot) is unchanged; the deployment model (where the baseline
lives) is rewritten.
Why
---
The previous draft prescribed a single shared org baseline at
nwarila-platform/.github/.github/renovate.json5 with every consumer
extending it. That centralised model conflicts with the three-tier
ADR architecture from ADR-0001: stack-specific concerns
(terraform.rangeStrategy, pip constraints, dockerfile rebases) live
at the template tier, and Renovate config carries the same character.
A Terraform-specific Renovate tweak should not have to touch a
config that Packer and Python consumers also evaluate.
What
----
The new model is Option 4 (formerly the Option 4 placeholder, now
chosen): each type-template owns a complete, self-contained
.github/renovate.json5. Consumers extend only their type-template:
extends: ["github>NWarila/terraform-runner-template"]
There is no org-level renovate.json5. The org repo holds ADRs and
policies, not Renovate config. Stacks evolve independently. Truly
universal settings (cadence, dependency-dashboard, prConcurrentLimit)
are duplicated across each type-template's baseline; the duplication
is small and the stack independence is worth more.
Edits in this commit:
- Title: "Shared Org Baseline" → "Per-Template Baselines".
- TL;DR rewritten for the new model.
- Context: framing of the inheritance argument moved from
"single shared config at the org level" to "single source of
truth at the type-template tier".
- Decision Drivers §5 + §6 reframed (DRY-within-a-stack,
stack-independence).
- Considered Options grew from 5 to 7: split the centralised
Option 3 from the per-template Option 4; added Option 5 (org→
template→consumer extends chain) for completeness; renumbered.
- Decision Outcome rewritten: Option 4 chosen; spells out what
each template's baseline configures and the consumer's thin
extends; explicitly forbids an org-level renovate.json5.
- Pros and Cons of Options 2-7 rewritten to match the new
framing.
- Confirmation §1-§7: inheritance now points at NWarila/<type-
template> rather than nwarila-platform/.github; new §6
explicitly forbids org-level Renovate config; §5 acknowledges
the duplication trade-off.
- Consequences (Positive/Negative/Neutral) rewritten for the new
model.
- Related ADRs: cross-link to template-tier ADR-0001 explains
that each stack's analogous decisions live in its own ADRs.
- decision-records/README.md Index entry refreshed.
Editorial-rule analysis
-----------------------
ADR-0001 §7 allows post-acceptance edits that correct
typos/links/formatting/Status/supersession but forbids silent
changes to "the decision, its scope, or its rationale". This edit
changes the *deployment model* (centralised → per-template) which
arguably moves "scope" — but ADR-0004 has not propagated to any
consumer yet (no consumer's renovate.json5 currently extends an
nwarila-platform/.github baseline that doesn't exist). Per the
established practice in this repo (see ADR-0001 itself, edited in
place to add the three-tier model when no consumer was yet
mirroring the previous two-tier text), pre-propagation in-place
edits are clean. The commit message is the audit trail; subsequent
edits to a *propagated* version will use Supersedes/Superseded by.
Co-Authored-By: Claude Opus 4.7 (1M context) <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.
Summary
Pre-propagation in-place amendment to ADR-0004. The decision (Renovate over Dependabot) is unchanged. The deployment model is rewritten from "single shared org baseline" to "per-template self-contained baselines."
What changed in the model
Why
The centralised model conflicts with the three-tier ADR architecture from ADR-0001. Stack-specific concerns belong at the template tier — `terraform.rangeStrategy: "pin"` should not be visible to a Packer consumer's Renovate evaluation. Per-template baselines mean each stack evolves independently and the configuration model mirrors the ADR architecture. The duplication of truly-universal settings (cadence, dashboard, PR concurrency) across each template baseline is small and worth the stack independence.
What this PR does NOT do
Editorial rule analysis
ADR-0001 §7 allows post-acceptance edits that correct typos/links/formatting/Status/supersession but forbids silent changes to "the decision, its scope, or its rationale." This edit changes the deployment model (centralised → per-template), which arguably moves "scope" — but ADR-0004 has not yet propagated to any consumer (no consumer extends `nwarila-platform/.github`'s renovate.json5, because it doesn't exist). Per the established practice in this repo (ADR-0001 was edited in place to add the three-tier model under the same pre-propagation reasoning), this is clean. Subsequent edits to a propagated version will use Supersedes/Superseded by.
Test plan
🤖 Generated with Claude Code