Skip to content

Render features and enhancements separately in release notes - #4065

Open
lcawl wants to merge 3 commits into
mainfrom
changelog-features
Open

lcawl wants to merge 3 commits into
mainfrom
changelog-features

Conversation

@lcawl

@lcawl lcawl commented Sep 9, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Instead of the current "Features and enhancements" section that is created in the changelog render command output and the changelog directive, this PR generates separate "Features" and "Enhancements" sections.

Similar to the handling of the "Highlights" section, there's an option in the changelog directive to show each changelog's description too.

Details

feature and enhancement now render as separate Features and Enhancements sections. Empty sections are still omitted, so a patch release with only enhancements will not show a Features heading.

:description-visibility: accepts comma-separated tokens, including keep-feature-descriptions. You can combine overlays:

:description-visibility: keep-feature-descriptions, keep-highlight-descriptions

Deep links that used -features-enhancements need to move to -features / -enhancements. That is documented in docs/syntax/changelog.md.

With :dropdowns: set, "Features" uses the same {dropdown} rendering as "Highlights". Without that option, "Features" stay flat bullets. "Enhancements" and the other list sections are unchanged.

Area headers show only when :subsections: is also set. That applies to "Features", "Highlights", and the other dropdown sections (breaking changes still group by subtype).

Tests

When I change the Cloud Serverless release notes to use this new option:

:::{changelog}
:cdn: cloud-serverless
:highlights:
:description-visibility:  keep-highlight-descriptions, keep-feature-descriptions
:link-visibility: keep-links
:::

... it renders like this:

image

If I drop the keep-feature-descriptions clause from the directive, it looks like this:

image

If I add the :dropdowns: clause, it looks like this:

image

If I also add the :subsections: clause, that works too:

image

Generative AI disclosure

  1. Did you use a generative AI (GenAI) tool to assist in creating this contribution?
  • Yes
  • No
  1. If you answered "Yes" to the previous question, please specify the tool(s) and model(s) used (e.g., Google Gemini, OpenAI ChatGPT-4, etc.).

Tool(s) and model(s) used: Cursor Grok 4.6

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Docs preview (local build)

Handbook preview: https://docs-v3-preview.elastic.dev/elastic/docs-builder/pull/4065/

Sample changed pages:

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved.


What is this? | From workflow: PR Review

Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.

ChangelogConfigTests.cs and ChangelogDescriptionVisibilityTests.cs
conflicted because main moved these tests from xUnit to TUnit while this
branch edited the same lines. Kept this branch's assertions and test
names (the features/enhancements split) and used the TUnit [Test]
attribute.

The tests this branch adds (ChangelogDropdownsTests,
ChangelogFeatureEnhancementSectionTests and the new classes in
ChangelogDescriptionVisibilityTests) still used xUnit, so they are
ported the same way main ported the others: [Fact] becomes [Test],
[InheritsTests] goes on each DirectiveTest class, and the
ITestOutputHelper constructor argument is dropped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

if (enhancements.Count > 0)
{
_ = sb.AppendLine();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Severity: P3 (Low)

changelog render now splits enhancements into their own ### Enhancements / === Enhancements section in the index, GFM and AsciiDoc renderers, but no test covers that output. The updated Elastic.Changelog.Tests only check that ### Features / === Features appear. That check would also pass if enhancement entries disappeared or still showed up under Features. Please add render tests with a bundle that has both a feature and an enhancement. They should check that each entry lands under its own heading and anchor (-features / -enhancements), that the Features heading is left out when the bundle only has enhancements, and that the hidden-entry logic (hasVisibleEnhancements, AllEntriesHidden(enhancements)) still works.

Generated by Libra. Specialist: libra-complexity. React with 👍 or 👎 to give feedback on this comment.

This branch was successfully deployed

2 active deployments
docs-preview — 0bc379d5 Deployed Nov 4, 2026 by github-actions[bot]
assembler-preview — 0bc379d5 Deployed Nov 4, 2026 by github-actions[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants