Skip to content

public-api.py: apply *REMOVED* at promotion; promote the API surface since 3.4.0 - #3316

Merged
mgravell merged 2 commits into
mainfrom
marc/public-api-promote
Oct 30, 2026
Merged

mgravell merged 2 commits into
mainfrom
marc/public-api-promote

Conversation

@mgravell

Copy link
Copy Markdown
Collaborator

Two commits, reviewable separately.

1. Fix eng/public-api.py --promote

The analyzer records a vanished shipped signature as a *REMOVED* line in the unshipped file. Promotion moved every unshipped line across verbatim, so any promotion after such a change would have left the shipped file with both the dead signature and a *REMOVED* copy of it; the analyzer then fails the build on the dead one (RS0017). Main currently carries three of these, all parameter renames from the StyleCop 1.3 tidy-up (#3296): muxer to multiplexer on the two Azure providers' AfterConnectAsync overrides, and other to obj on RESPite's AsciiHash.Equals.

Promotion now consumes the marker: the named signature leaves the shipped file, the marker is not carried over, a marker that names nothing shipped is an error, and a *REMOVED* line already sitting in a shipped file is reported. The note becomes (+N promoted, -N removed), and an unshipped file holding only removals is still emptied. --check and sort-only behaviour are unchanged.

2. Promote the surface since 3.4.0

eng/public-api.py --promote, with the fixed script. The last promotion was "Bump to 3.4 and ship the 3.4.0 API surface" (e7c43a2); 3.4.5 and 3.4.20 shipped without one, so this is everything added since: 52 StackExchange.Redis entries (lag-aware availability, FailbackHealthCheck, HealthCheckProbeScope, the RedisType/KeyNotificationType tokens from #3312), the net6.0 SetUserPemCertificate overload, and RESPite's AsciiHash.Equals(object? obj). The three renames above are applied. Every unshipped file is now empty, which is the shape to cut a release from.

Verified: no *REMOVED* marker remains anywhere; the old muxer/other signatures are gone from shipped; a second --check run is a no-op; dotnet build Build.csproj -c Release /p:CI=true passes on every target framework.

Note the [SER011] entries on the BLESS (#3261) and BITRANGEINTARRAY (#3315) branches are not affected; they stay unshipped on their branches and will promote with a later release.

…g them

The analyzer records a vanished shipped signature as a *REMOVED* line in
the unshipped file. Promotion moved every unshipped line across verbatim,
so a promotion after any such change would have left the shipped file
with both the dead signature and a *REMOVED* copy of it, and the analyzer
would then fail the build on the dead one (RS0017).

Promotion now consumes the marker: the named signature is dropped from the
shipped file, the marker is not carried over, and a marker that names
nothing shipped is an error. A *REMOVED* line already sitting in a shipped
file is also reported. The "+N promoted" note gains "-N removed", and an
unshipped file holding only removals is still emptied.
eng/public-api.py --promote. Fifty-two StackExchange.Redis entries (the
lag-aware availability surface, FailbackHealthCheck, HealthCheckProbeScope,
the 8.12-independent RedisType and KeyNotificationType tokens) and the
net6.0 SetUserPemCertificate overload move to shipped; the three parameter
renames from #3296 (muxer -> multiplexer on the Azure providers'
AfterConnectAsync, other -> obj on RESPite AsciiHash.Equals) are applied
rather than copied. Every unshipped file is now empty.
@mgravell
mgravell merged commit 5b2c3d1 into main Oct 30, 2026
5 checks passed
@mgravell
mgravell deleted the marc/public-api-promote branch October 30, 2026 12:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant