Skip to content

changelog.d: fragment validation is red at HEAD (recurring; current count in the thread) #502

Description

@vicondoa

test-changelog is red at HEAD: 19 pre-existing fragments fail structural validation

Summary

make test-changelog (Makefile:344-347 - "the changelog policy gate (also the CI
test-changelog job)") is red on an unmodified checkout of
feat/v3-resource-runtime-rewrite. scripts/changelog-check.sh exits 1.

Because the gate validates every fragment present, not only changed ones, it
is permanently red: it can no longer distinguish a newly added fragment's
mistake from the standing 19, and any change that adds a fragment inherits the
failure. A gate that is always red provides no information at exactly the moment
it is supposed to prove something - and this one is on the shipping path.

Reproduction

$ bash scripts/changelog-check.sh; echo $?
PASS: CHANGELOG.md policy checks passed.
FAIL: changelog.d/ fragment validation failed:
  - changelog.d/2026-08-19-d2bd-runtime.md:1: content before the first '### <Section>' heading
  - changelog.d/2026-08-20-device-provider-ownership.md:1: content before the first '### <Section>' heading
  - changelog.d/2026-08-21-v3-guest-u3.md:1: content before the first '### <Section>' heading
  - changelog.d/2026-08-26-zone-only-u3.md:1: content before the first '### <Section>' heading
  - changelog.d/2026-08-26-zone-only-u4.md:1: content before the first '### <Section>' heading
  - changelog.d/2026-09-10-u12-credential-driver.md:26: unknown section 'Notes'; expected one of Added, Changed, Deprecated, Removed, Fixed, Security
  - changelog.d/adr046-u10-credential-providers.md:20: unknown section 'Follow-up'; expected one of Added, Changed, Deprecated, Removed, Fixed, Security
  - changelog.d/adr046-u11-broker-profiles.md:1: content before the first '### <Section>' heading
  - changelog.d/adr046-u11-transport-carriage.md:1: content before the first '### <Section>' heading
  - changelog.d/credential-async-user-sources.md:1: content before the first '### <Section>' heading
  - changelog.d/credential-guest-local-adapters.md:1: content before the first '### <Section>' heading
  - changelog.d/desktop-provider-ownership.md:1: content before the first '### <Section>' heading
  - changelog.d/feat-v3-resource-runtime-rewrite-u2-spec-store.md:1: content before the first '### <Section>' heading
  - changelog.d/guest-vmm-and-closure-convergence.md:1: content before the first '### <Section>' heading
  - changelog.d/nix-surface-ownership.md:1: content before the first '### <Section>' heading
  - changelog.d/process-runtime-owners.md:1: content before the first '### <Section>' heading
  - changelog.d/provider-owned-zone-projections.md:1: content before the first '### <Section>' heading
  - changelog.d/realm-compatibility-retirement.md:1: content before the first '### <Section>' heading
  - changelog.d/refactor-network-storage-activation-owners.md:1: content before the first '### <Section>' heading
  - changelog.d/v3-guest-u9-component-session.md:1: content before the first '### <Section>' heading
  See changelog.d/README.md for the fragment format.
1

Two distinct shapes, two different decisions

  1. 17 fragments predate the heading requirement - they open with prose
    before the first ### <Section> heading. Format-only defect; the fix is
    placement, not content.
  2. 2 fragments use unsanctioned sections - Notes
    (2026-09-10-u12-credential-driver.md:26) and Follow-up
    (adr046-u10-credential-providers.md:20). This is a policy question, not a
    typo: either the content folds into an allowed section, or the allowed set
    gains a sanctioned section (with changelog.d/README.md updated). Decide it
    once and apply it consistently - do not special-case by filename.

Proposed work

  • Fix the 19 as format-only edits: move the leading prose under the correct
    ### Added|Changed|Deprecated|Removed|Fixed|Security heading. No content,
    intent, or attribution changes.
  • Decide the Notes/Follow-up question once, then apply it.
  • Keep the policy strict - do not relax validation to tolerate free-form prose.
    The strictness is what surfaced this.
  • Land as its own unit before the rewrite's ship gate, since test-changelog is
    part of the shipping path.

Acceptance criteria

  • bash scripts/changelog-check.sh exits 0 on a clean checkout and
    make test-changelog passes.
  • The 19 fragments' textual content is preserved; only placement/section labels
    change.
  • A newly added fragment validates with no parking/exclusion mechanism.

Non-goals

  • Not relaxing the fragment format.
  • Not folding fragments into CHANGELOG.md - make changelog-fold is a
    merge-time operation with its own timing.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    backlogBacklog — not tied to a specific releasebugd2b delivery memory category

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions