Skip to content

ADR-007: Empty ADR References Headers Are Dropped; Required Only When a Concern Cites a Specific ADR

Source identity (from 02-design/adr/ADR-007-empty-adr-references-headers-dropped.md):

ddx:
  id: ADR-007
  depends_on:
    - helix.prd

ADR-007: Empty ADR References Headers Are Dropped; Required Only When a Concern Cites a Specific ADR

DateStatusDecidersRelatedConfidence
2026-05-30AcceptedHELIX maintainersconcerns library, schema validatorHigh

Context

AspectDescription
ProblemMany concerns ship an ADR References section header with no entries beneath it. The empty header creates a false promise of governing decisions that do not exist, and pads the artifact with structure that carries no information.
Current State14 concerns currently ship an empty ADR References header: a11y-wcag-aa, demo-asciinema, demo-playwright, design-patterns-gof, e2e-kind, e2e-playwright, go-std, hugo-hextra, i18n-icu, k8s-kind, o11y-otel, python-uv, rust-cargo, scala-sbt. The schema validator does not require the section to be present.
RequirementsThe concerns library must not advertise references that do not exist. The section should appear only when it carries real ADR citations, and should be omitted when it would otherwise be empty. The schema validator must continue to treat the section as optional.

Decision

An ADR References section header in a concern is included only when the concern actually cites one or more ADRs. Empty headers are removed by Phase 3 mechanical edits across the 14 concerns enumerated above. The schema validator does not require this section; presence is driven by content, not by template shape.

Concerns that genuinely govern decisions via ADRs keep the section and list the ADRs they cite. Concerns with no real ADR citations omit the header entirely.

Key Points: header presence follows content | empty headers removed in Phase 3 | schema validator keeps the section optional

Alternatives

OptionProsConsEvaluation
Keep empty ADR References headers as a template slotUniform structure across concernsFalse promise of citations; padding without information; invites cargo-cult copy of the empty section into new concernsRejected: structure without content is noise
Require every concern to cite at least one ADRForces explicit governanceMost concerns are not governed by an ADR; would manufacture spurious referencesRejected: not all concerns need ADR backing
Drop empty headers; require the section only when ADRs are citedRemoves false promise; keeps real citations visible; matches existing validator behaviorRequires a one-time mechanical edit pass across 14 concernsSelected: smallest change that aligns shape with content

Consequences

TypeImpact
PositiveConcerns no longer advertise references that do not exist.
PositiveReal ADR citations remain visible and unambiguous in the concerns that have them.
PositiveNew concerns inherit a “populate or omit” rule that prevents the empty header from reappearing.
NegativePhase 3 must touch 14 concern files to remove the empty headers.
NeutralThe schema validator is unchanged; the section stays optional.

Risks

RiskProbImpactMitigation
Future concerns reintroduce the empty header by copy-pasteMLPhase 3 edits remove existing instances; reviewers reject empty headers on new concerns
A real ADR citation is accidentally removed alongside the empty headersLMPhase 3 mechanical edits target only the enumerated 14 concerns where the section is empty

Validation

Success MetricReview Trigger
None of the 14 enumerated concerns ships an empty ADR References header after Phase 3An empty ADR References header appears in any concern
Concerns that cite ADRs retain the section with the citations intactA real ADR citation is dropped by the Phase 3 edits

References