fix(changelog): probe-based CDN sourcing replaces dead pool-registry read - #3931
Merged
Merged
Conversation
Mpdreamz
force-pushed
the
fix/changelog-link-field
branch
from
August 26, 2026 07:57
e5a8cbd to
be1a0bd
Compare
Mpdreamz
force-pushed
the
fix/changelog-probe-sourcing
branch
from
August 26, 2026 07:58
5a5f953 to
2eb27fa
Compare
Mpdreamz
force-pushed
the
fix/changelog-link-field
branch
from
August 26, 2026 08:21
be1a0bd to
4b5a43a
Compare
Adds `link:` to `ChangelogEntryDto`, `ChangelogEntry` (domain type),
`BundledEntry`, and `BundledEntryDto` so the field survives the full
YAML → domain → YAML round-trip and the scrub pass.
`ChangelogEntry.IsMarker` returns true when `Link` is non-null. A marker
is a machine-written object containing only `link: {prNumber}` that
redirects a non-primary PR to the parent entry's key; no markers exist in
S3 today (the writer lands in Step 8), so this is inert on merge.
`ChangelogContentScrubber.ScrubChangelog` explicitly preserves `link:` in
both the `BundledEntry` passed to `LinkAllowlistSanitizer` and the `with`
expression applied after sanitization. `link:` is never a URL, so no
allowlist rule touches it.
Tests: serialization round-trip for marker entries; scrub preserves `link:`
when prs: are stripped; `IsMarker` false on normal entries.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…d other non-link fields ToDto(ChangelogEntry) now short-circuits on IsMarker: only Link is emitted. This enforces the marker contract (link: is the sole field) and prevents 'title: ''' from appearing in round-tripped marker YAML. New test: SerializeEntry_MarkerEntry_YamlContainsOnlyLinkField. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Mpdreamz
force-pushed
the
fix/changelog-link-field
branch
from
August 26, 2026 08:25
4b5a43a to
a565180
Compare
…read
Replace FetchAsync (reads changelog/{org}/{repo}/{branch}/registry.json, which
nothing has written since #3760) with per-PR probing for the --prs / --report /
--release-version CDN path. For each requested PR, the bundler now fetches
{pr}.yaml directly:
- 404 = no changelog for this PR (warn + skip, not retried — it is authoritative)
- 5xx / transport errors use the existing retry budget
- Marker entries (link: {parentPr}) are resolved depth-1; marker chains and
missing parents are hard errors
- Duplicate markers pointing to the same parent yield one entry
Also adds an explicit --issues CDN error (issue→PR resolution requires reading
every body, which probing cannot do).
Fixes the reported regression: changelog bundle --prs against CDN returned zero
entries because the pool registry was never written after #3760 retired the writer.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Mpdreamz
force-pushed
the
fix/changelog-probe-sourcing
branch
from
August 26, 2026 08:34
2eb27fa to
f5dc4c3
Compare
reakaleek
approved these changes
Aug 26, 2026
Mpdreamz
force-pushed
the
fix/changelog-link-field
branch
from
August 26, 2026 09:03
a565180 to
6d229d1
Compare
Mpdreamz
added a commit
that referenced
this pull request
Aug 26, 2026
…read (#3931) Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Mpdreamz
added a commit
that referenced
this pull request
Aug 26, 2026
…read (#3931) Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Mpdreamz
added a commit
that referenced
this pull request
Aug 26, 2026
…ide (Step 7) (#3928) * feat(changelog): add link: field to changelog entries — marker read side Adds `link:` to `ChangelogEntryDto`, `ChangelogEntry` (domain type), `BundledEntry`, and `BundledEntryDto` so the field survives the full YAML → domain → YAML round-trip and the scrub pass. `ChangelogEntry.IsMarker` returns true when `Link` is non-null. A marker is a machine-written object containing only `link: {prNumber}` that redirects a non-primary PR to the parent entry's key; no markers exist in S3 today (the writer lands in Step 8), so this is inert on merge. `ChangelogContentScrubber.ScrubChangelog` explicitly preserves `link:` in both the `BundledEntry` passed to `LinkAllowlistSanitizer` and the `with` expression applied after sanitization. `link:` is never a URL, so no allowlist rule touches it. Tests: serialization round-trip for marker entries; scrub preserves `link:` when prs: are stripped; `IsMarker` false on normal entries. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(changelog): marker entries serialize as link-only — omit title and other non-link fields ToDto(ChangelogEntry) now short-circuits on IsMarker: only Link is emitted. This enforces the marker contract (link: is the sole field) and prevents 'title: ''' from appearing in round-tripped marker YAML. New test: SerializeEntry_MarkerEntry_YamlContainsOnlyLinkField. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(changelog): probe-based CDN sourcing replaces dead pool-registry read (#3931) Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(changelog): marker guard — allow link: alongside other fields, only short-circuit pure markers Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(changelog): restore marker-only guard; remove contradictory scrub test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(changelog): propagate probe error from FetchPrEntryAsync — transient failures now throw instead of returning null Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(changelog): TryExtractPrNumber validates repo name — kibana PRs no longer probe elasticsearch pool Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes the reported regression: `changelog bundle --prs` against CDN finds zero entries because `FetchAsync` reads `changelog/{org}/{repo}/{branch}/registry.json`, which nothing has written since #3760 retired the writer.
The fix: replace the registry-read with one direct GET per PR number for the `--prs` / `--report` / `--release-version` CDN path:
Old `FetchAsync` / `FetchCdnEntriesAsync` kept for the git-range CDN path (separate follow-up). This PR stacks on #3928 (`link:` field / `IsMarker`).
Test plan
🤖 Generated with Claude Code