Skip to content

docs: CHANGELOG audit findings for v3.x — completeness, wording, and process gaps #13359

@membphis

Description

@membphis

Current State

The CHANGELOG for the 3.x series (21 versions, ~1100 PRs spanning 2022-10 → 2026-04) has systemic issues that go beyond individual PR omissions. The most impactful problems fall into recurring patterns:

  1. Four patch tags are entirely missing from master CHANGELOG.md

  2. Silent rockspec dependency upgrades (15+ instances)
    Every minor release upgrades dependencies with user-visible behavior or compatibility impact, but the CHANGELOG is silent. Most impactful examples:

    • 3.15.0: lua-resty-session 3.10 → 4.1.5 — default switches to AES-256-GCM; all session cookies issued by 3.14.x become invalid, forcing every OIDC user to re-authenticate after upgrade. Not mentioned.
    • 3.15.0: lua-resty-openidc 1.7.6 → 1.8.0; net-url 0.9 → 1.2 (major bump).
    • 3.16.0: api7-lua-resty-http 0.2.2 → 0.2.3 (rejects control chars in headers, affects every plugin using resty.http).
    • 3.8.0: luasec 0.9 → 1.3.2 (TLS library cross-major upgrade).
    • 3.4.0: lua-resty-healthcheck-api7 2.2.3 → 3.0.0 (major bump).
    • 3.9.0: lua-resty-radixtree 2.8.2 → 2.9.1 (route ordering fix chore: upgrade radixtree version #10861 hidden behind a chore title).
  3. Security fixes are not consistently flagged

  4. Breaking changes mis-classified as Bugfixes / missing :warning:

  5. Wording from implementation side rather than user side

  6. Within-cycle intermediate changes not folded

  7. Same PR listed twice in Change and Bugfixes (same release)

  8. Markdown / numbering / typos

    • 3.14.0 and 3.14.1: ## Doc improvements uses H2 (breaks TOC, looks like a new release).
    • 3.5.0: PR #9813 referenced — actual PR is #9622 (google-cloud-logging client_email).
    • 3.11.0: plugin name typo attach-consmer-label.
    • 3.12.0 chore: upgrade openresty version to v1.27.11 #11936: OpenResty version typo v1.27.11 — actual 1.27.1.1.
    • 3.0.0: APSISIX typo on the enable_cpu_affinity entry.
  9. Large omission batches in older versions

Desired State

A. Backfill missing patch sections into master CHANGELOG.md

B. Six release-process additions to prevent regression

  1. Rockspec diff gate — release pipeline runs git diff <prev>..<this> -- '*.rockspec'; any non-patch dependency bump requires a corresponding CHANGELOG entry. Closes the 15+ silent dep-bump pattern.
  2. Patch-release CHANGELOG cherry-pick rule — any CHANGELOG entry written on a release/X.Y branch must be paired with a cherry-pick PR back to master. Prevents the four-tag pattern from recurring.
  3. Breaking-change scan gate — scan apisix/schema_def.lua, apisix/admin/*.lua, apisix/plugins/*.lua for changes touching default | required | enum | encrypt_fields | deprecated | remove | rename; require a :warning: CHANGELOG line for each. Covers feat: set default value of ssl_trusted_certificate to system #11993, feat: implement credential #11601, feat: strictly validate the input of core resources #10233, fix: only trust X-Forwarded-* headers from trusted_addresses #12551 patterns.
  4. PR-number cross-checkgrep -oE '#[0-9]+' CHANGELOG.md | sort -u vs commit-derived PR list to catch transcription errors like #9622#9813.
  5. Markdown lint — every ## heading in CHANGELOG must match a release version; ## Doc improvements style mistakes flagged.
  6. ### Security convention — any CVE / auth-bypass / privilege-escalation fix gets a dedicated subsection with :warning:, so operators can quickly identify must-upgrade versions.

C. Per-version revision lists

Detailed per-PR evidence (CHANGELOG diff, bug label state, code path, proposed rewording) is available offline and can be split into separate revision PRs per version. Highest-priority near-term:

Earlier versions (3.0.0 → 3.13.0) can be batched per still-maintained LTS branch.

Metadata

Metadata

Assignees

No one assigned

    Labels

    docDocumentation things

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status

    📋 Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions