fix(changelog): groundwork for PR-anchored CDN sourcing - #3922
Merged
Conversation
…stamp changelog entries are always keyed by PR number from now on. - `filename: issue` and `filename: timestamp` in changelog.yml now emit errors pointing at `changelog note` for PR-less items - Default flips from `Timestamp` to `Pr` (all seven onboarded repos already use PR-number file names) - `--use-issue-number` CLI flag errors with a clear migration message; `--use-pr-number` remains but is now a no-op (always true) - `ChangelogFileWriter.GenerateFilename` drops the issue and timestamp branches; a PR-less call with no resolvable PR number now errors instead of silently falling back to a timestamp slug - Test fixtures updated: tests that exercised incidental filename generation now supply an explicit PR URL; config tests updated to reflect the new default and the new error cases Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ilently
The pool-tree index changelog/{org}/{repo}/{branch}/registry.json has
not been written by any client since #3760. Events for that key shape
are now dropped with a debug log rather than mirrored verbatim to the
public bucket. A stale create event from an old CLI version is harmless;
no delete propagation is needed either, since nothing reads these keys.
Bundle registry events (bundle/{product}/registry.json) continue to
schedule a group reconcile as before — they are reconciler-owned and
this change does not affect them.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…on CDN Add FetchNamedAsync to CdnChangelogEntryFetcher for direct per-file GETs without consulting the pool registry. A 404 is authoritative (not retried), while 5xx/transport errors use the normal retry budget. Switch the --files CDN path in ChangelogBundlingService to FetchNamedAsync, fixing a regression where a --files run could not see entries omitted from the stale pool registry. Add a CDN guard that errors --all and --input-products with a message pointing at --force-local, since those filters require pool enumeration which no longer exists. Update tests: CDN sourcing pool-selection tests now use --prs (registry still fetched for that path); --files tests assert the direct entry URL rather than the registry; MonthlyProfile fixture converted to use_local_changelogs since product-filter CDN mode is now correctly blocked. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
reakaleek
approved these changes
Aug 25, 2026
6 tasks
- ChangelogFileWriter: GenerateFilename now returns null? on error and WriteChangelogAsync short-circuits before writing when no PR is derivable. Previously the placeholder 'changelog.yaml' was written unconditionally. - CdnChangelogEntryFetcher.TryFetchNamedEntryAsync: permanent client errors (4xx other than 404) no longer consume the retry budget — they fail fast immediately. Only 5xx / transport errors retry as before. - Update PrFetchFailureTests: issue-only+StrictFetch flow now returns false (no file written) because filename derivation requires a PR number. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Mpdreamz
added a commit
that referenced
this pull request
Aug 26, 2026
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
Groundwork for replacing the retired pool registry (
changelog/{org}/{repo}/{branch}/registry.json) with direct per-PR key probing. Three independent changes, all straight tomain:--fileskeyed GET (FetchNamedAsync): the--filesCDN path now issues one direct GET per requested file name instead of fetching the pool registry first. A 404 is authoritative (not retried); 5xx uses the normal retry budget. This also fixes a real bug: a--filesrun could not see an entry the stale registry omitted.--all/--input-products: these filters require pool enumeration (download everything, then filter in memory). With no pool index, they cannot work on CDN. Both now error immediately with a message pointing at--force-local.filename: issue/timestampretired (ChangelogConfigurationLoader,ChangelogFileWriter): these strategies are no longer supported. The default changes fromTimestamptoPr. A PR-lesschangelog addnow errors and points atchangelog note(the escape hatch being added in Stack A).--use-issue-numberlikewise errors.ScrubberProcessor): achangelog/{org}/{repo}/{branch}/registry.jsonevent from an old client is now dropped with a debug log instead of being mirrored to the public bucket. The pool index was removed in Retire the client-side changelog registry refresh #3760; no client writes it, so this event path was dead anyway.Part of the broader fix for the reported regression where
changelog bundle --prsagainst CDN finds no entries (tracked in elastic/docs-eng-team#734).Test plan
dotnet test tests/Elastic.Changelog.Tests/)--filesCDN path fetches entry directly, no registry GET--alland--input-productserror on CDN with pointer to--force-localfilename: timestampandfilename: issueeach produce a tailored errorchangelog addwith no resolvable PR errors and nameschangelog note🤖 Generated with Claude Code