Skip to content

feat(changelog): link: read side — schema field, scrub round-trip, marker resolution - #3924

Merged
Mpdreamz merged 1 commit into
mainfrom
fix/changelog-link-read-side
Aug 26, 2026
Merged

feat(changelog): link: read side — schema field, scrub round-trip, marker resolution#3924
Mpdreamz merged 1 commit into
mainfrom
fix/changelog-link-read-side

Conversation

@Mpdreamz

Copy link
Copy Markdown
Member

Summary

Step 7 of the two-anchor plan: adds the link: read side so no bundler ever treats a pipeline-written marker as a malformed empty entry. No markers exist in S3 today — all new paths are inert on merge.

  • Adds Link to ChangelogEntryDto, ChangelogEntry, and BundledEntry so link: survives the scrub round-trip
  • ChangelogContentScrubber: bare link:-only markers pass through unchanged; link: combined with content fields (title, type, prs) throws InvalidOperationException
  • ChangelogEntryMatcher: detects markers in both local and CDN paths, suppresses them from bundle output, resolves each to its parent after the main pass:
    • parent not found → hard error (pipeline promise broken)
    • parent is itself a marker (depth > 1) → hard error
    • parent found → marker dropped; parent included once

Stack

This PR is stacked on main; Step 8 (canonical keys + marker writing) stacks on top of this.

Test plan

  • MarkerScrubTests: bare link: passes through; link: + content fields throws
  • MarkerResolutionTests: one real + one marker → one output entry; missing parent → error; marker → marker chain → error; two markers same parent → one entry; no markers → unaffected
  • 947 tests pass, 0 failures

🤖 Generated with Claude Code

@Mpdreamz
Mpdreamz requested a review from a team as a code owner August 25, 2026 11:46
@Mpdreamz
Mpdreamz requested a review from theletterf August 25, 2026 11:46
…rker resolution

Adds the `link:` field to `ChangelogEntryDto`, `ChangelogEntry`, and
`BundledEntry` so markers survive the scrub round-trip.

`ChangelogContentScrubber` fast-paths a bare `link:`-only entry unchanged;
a marker combined with content fields (title, type, prs) throws to catch
authoring errors early.

`ChangelogEntryMatcher` now detects markers in both `MatchChangelogsAsync`
and `MatchChangelogContents`, suppresses them from bundle output, and resolves
each to its parent entry after the main pass:
- parent not found → hard error (a pipeline promise was broken)
- parent is itself a marker (depth > 1) → hard error
- parent found → marker silently dropped; parent included once

No markers exist in S3 today so all new paths are inert on merge.
Step 7 of the two-anchor plan (#3921).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@Mpdreamz
Mpdreamz force-pushed the fix/changelog-link-read-side branch from e5d2965 to b5f92f4 Compare August 25, 2026 13:51
Comment thread src/services/Elastic.Changelog/Bundling/ChangelogEntryMatcher.cs
@Mpdreamz
Mpdreamz merged commit 0ef523c into main Aug 26, 2026
31 checks passed
@Mpdreamz
Mpdreamz deleted the fix/changelog-link-read-side branch August 26, 2026 09:04
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.

2 participants