Skip to content

Release 2.2.1: cherry-pick Socket Mode routing fixes - #731

Merged
teddy arida-moody (teddyam) merged 3 commits into
releases/corefrom
teddyam-socket-mode-release
Nov 10, 2026
Merged

teddy arida-moody (teddyam) merged 3 commits into
releases/corefrom
teddyam-socket-mode-release

Conversation

@teddyam

Copy link
Copy Markdown
Contributor

Summary

Based on releases/core; excludes unrelated main changes. Both fixes were cherry-picked without conflicts and retain source commit references.

Validation

  • Socket Mode unit tests: 225 passed on .NET 8 and 225 passed on .NET 10.
  • Confirmed cherry-picked patches match the original commits and git diff --check passes.

Release

After approval and merge, run Teams.NET-ESRP from releases/core with publishType=Public. No publishing pipeline or release tag has been triggered or created.

## Summary
- Route Socket Mode connect/negotiate requests through
`{geo}.botapi.skype.com` instead of `botapi.skype.com/{geo}`, matching
microsoft/teams.py#676.
- Remove the configurable endpoint override
(`SocketModeOptions.NegotiateBaseUrl`); only `Geos` remains
configurable.
- An empty geo list (`Geos = []`) uses the defaults: `amer`, `emea`, and
`apac`. An empty geo string (`Geos = [""]`, or an empty string within a
non-empty list) is rejected; it no longer bypasses geo-specific routing.
- Log each resolved connect/negotiate URL at Information during startup
so it appears with the sample's default logging configuration.
- Update routing coverage and documentation. Authentication scopes,
returned SignalR URLs, and other API calls remain unchanged.

## Public API change
- Removing `SocketModeOptions.NegotiateBaseUrl` is a source-breaking
change for callers that set the endpoint override. Remove that
assignment and use `Geos` to select the connections instead; custom
endpoint overrides are no longer supported.
- Callers using an empty string to connect without a geo must select a
geo instead, or use an empty list to connect to all three defaults. An
empty list and an empty string have different behavior: `[]` uses
defaults; `[""]` is rejected.

## Validation
- Socket Mode tests passed on .NET 8 and .NET 10: 224 tests per
framework.
- User verified the production geo routing locally with the
SocketModeBot sample.

---------

Co-authored-by: Teddy Arida-Moody <teddyam@Teddys-MacBook-Pro.local>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
(cherry picked from commit 9af1000)
Socket Mode should not expose its temporary negotiation endpoint through
a public diagnostic API. Geo names that differ only by case also resolve
to the same hostname and must not create independently supervised
connections to that host.

## Changes
- Remove `SocketModeObserver.NegotiateUrl` and its unused internal
getter, along with related documentation and assertions. Connection
behavior and startup URL logging are unchanged. External callers using
this experimental property must remove that usage.
- Reject duplicate geos using ordinal, case-insensitive comparison while
preserving support for individual uppercase geo names and their
diagnostic casing.
- Move `["amer", "AMER"]` into rejection coverage and retain a
successful single-geo `"AMER"` case. Document the uniqueness
requirement.

## Validation
- Confirmed the mixed-case duplicate regression fails before the fix on
both target frameworks.
- All 225 Socket Mode tests pass on .NET 8 and .NET 10.

Co-authored-by: Teddy Arida-Moody <teddyam@Teddys-MacBook-Pro.local>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
(cherry picked from commit c9a905a)
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

@teddyam
teddy arida-moody (teddyam) added this pull request to the merge queue Nov 10, 2026
Merged via the queue into releases/core with commit 808a7fb Nov 10, 2026
2 checks passed
@teddyam
teddy arida-moody (teddyam) deleted the teddyam-socket-mode-release branch November 10, 2026 02:21
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.

2 participants