Skip to content

Updates version to v4.0.0 - #1875

Merged
garrytrinder merged 8 commits into
dotnet:mainfrom
waldekmastykarz:v4
Sep 18, 2026
Merged

garrytrinder merged 8 commits into
dotnet:mainfrom
waldekmastykarz:v4

Conversation

@waldekmastykarz

Copy link
Copy Markdown
Collaborator

No description provided.

@waldekmastykarz
waldekmastykarz requested a review from a team as a code owner September 18, 2026 09:01
Copilot AI lite review requested due to automatic review settings September 18, 2026 09:01
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The DevTools v4 schema is invalid and incomplete, and the stdio mock default still references v2.1.0.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Updates Dev Proxy to v4.0.0 with new versioned configuration schemas and updated references.

Changes:

  • Bumps project, installer, Docker, and script versions.
  • Adds the schemas/v4.0.0 schema set.
  • Updates configuration examples and schema URLs.
File summaries
File Summary
scripts/version.ps1 Updates beta version.
scripts/local-setup.ps1 Updates local setup version.
scripts/Dockerfile_local Updates local Docker version.
schemas/v4.0.0/typespecgeneratorplugin.schema.json Adds v4.0.0 TypeSpec schema.
schemas/v4.0.0/rewriteplugin.schema.json Adds v4.0.0 Rewrite schema.
schemas/v4.0.0/rewriteplugin.rewritesfile.schema.json Adds v4.0.0 rewrite-rules schema.
schemas/v4.0.0/rc.schema.json Adds v4.0.0 root configuration schema.
schemas/v4.0.0/ratelimitingplugin.schema.json Adds v4.0.0 rate-limiting schema.
schemas/v4.0.0/ratelimitingplugin.customresponsefile.schema.json Adds v4.0.0 rate-limit response schema.
schemas/v4.0.0/openapispecgeneratorplugin.schema.json Adds v4.0.0 OpenAPI generator schema.
schemas/v4.0.0/openaitelemetryplugin.schema.json Adds v4.0.0 OpenTelemetry schema.
schemas/v4.0.0/openaitelemetryplugin.pricesfile.schema.json Adds v4.0.0 pricing schema.
schemas/v4.0.0/mockstdioresponseplugin.schema.json Adds v4.0.0 stdio mock schema.
schemas/v4.0.0/mockstdioresponseplugin.mocksfile.schema.json Adds v4.0.0 stdio mocks schema.
schemas/v4.0.0/mockresponseplugin.schema.json Adds v4.0.0 response mock schema.
schemas/v4.0.0/mockresponseplugin.mocksfile.schema.json Adds v4.0.0 response mocks schema.
schemas/v4.0.0/mockrequestplugin.schema.json Adds v4.0.0 request mock schema.
schemas/v4.0.0/mockrequestplugin.mockfile.schema.json Adds v4.0.0 request mock-file schema.
schemas/v4.0.0/minimalpermissionsplugin.schema.json Adds v4.0.0 minimal permissions schema.
schemas/v4.0.0/minimalpermissionsguidanceplugin.schema.json Adds v4.0.0 permissions guidance schema.
schemas/v4.0.0/minimalcsompermissionsplugin.schema.json Adds v4.0.0 CSOM permissions schema.
schemas/v4.0.0/minimalcsompermissions.types.schema.json Adds v4.0.0 CSOM types schema.
schemas/v4.0.0/latencyplugin.schema.json Adds v4.0.0 latency schema.
schemas/v4.0.0/languagemodelratelimitingplugin.schema.json Adds v4.0.0 language-model rate-limit schema.
schemas/v4.0.0/languagemodelratelimitingplugin.customresponsefile.schema.json Adds v4.0.0 token-limit response schema.
schemas/v4.0.0/languagemodelfailureplugin.schema.json Adds v4.0.0 language-model failure schema.
schemas/v4.0.0/httpfilegeneratorplugin.schema.json Adds v4.0.0 HTTP file generator schema.
schemas/v4.0.0/hargeneratorplugin.schema.json Adds v4.0.0 HAR generator schema.
schemas/v4.0.0/graphrandomerrorplugin.schema.json Adds v4.0.0 Graph error schema.
schemas/v4.0.0/graphminimalpermissionsplugin.schema.json Adds v4.0.0 Graph permissions schema.
schemas/v4.0.0/graphminimalpermissionsguidanceplugin.schema.json Adds v4.0.0 Graph guidance schema.
schemas/v4.0.0/genericrandomerrorplugin.schema.json Adds v4.0.0 generic error schema.
schemas/v4.0.0/genericrandomerrorplugin.errorsfile.schema.json Adds v4.0.0 generic errors-file schema.
schemas/v4.0.0/executionsummaryplugin.schema.json Adds v4.0.0 execution summary schema.
schemas/v4.0.0/devtoolsplugin.schema.json Adds the DevTools schema; critical (3 votes): invalid JSON due to a missing comma; moderate (2 votes): omits preferredBrowserPath.
schemas/v4.0.0/crudapiplugin.schema.json Adds v4.0.0 CRUD plugin schema.
schemas/v4.0.0/crudapiplugin.apifile.schema.json Adds v4.0.0 CRUD API definition schema.
schemas/v4.0.0/cachingguidanceplugin.schema.json Adds v4.0.0 caching guidance schema.
schemas/v4.0.0/authplugin.schema.json Adds v4.0.0 authentication schema.
schemas/v4.0.0/apicenterproductionversionplugin.schema.json Adds v4.0.0 API Center production-version schema.
schemas/v4.0.0/apicenteronboardingplugin.schema.json Adds v4.0.0 API Center onboarding schema.
schemas/v4.0.0/apicenterminimalpermissionsplugin.schema.json Adds v4.0.0 API Center permissions schema.
install.iss Updates stable installer version.
install-beta.iss Updates beta installer version.
Dockerfile_beta Updates beta Docker version.
Dockerfile Updates stable Docker version.
DevProxy/devproxyrc.yaml Updates YAML schema references.
DevProxy/devproxyrc.json Updates JSON schema references.
DevProxy/DevProxy.csproj Bumps application version.
DevProxy/devproxy-errors.yaml Updates YAML schema reference.
DevProxy/devproxy-errors.json Updates JSON schema reference.
DevProxy/config/spo-csom-types.json Updates CSOM schema reference.
DevProxy/config/microsoft-graph.json Updates Graph schema references.
DevProxy/config/microsoft-graph-rate-limiting.json Updates root schema reference.
DevProxy/config/m365.json Updates M365 schema references.
DevProxy/config/m365-mocks.json Updates mocks schema reference.
DevProxy/config-templates/devproxyrc.yaml Updates template schema reference.
DevProxy/config-templates/devproxyrc.json Updates template schema reference.
DevProxy.Plugins/Mocking/MockResponsePlugin.cs Updates the response-mock schema URL; moderate (1 vote): the sibling stdio-mock default still references the v2.1.0 schema.
DevProxy.Plugins/DevProxy.Plugins.csproj Bumps plugin version.
DevProxy.Abstractions/DevProxy.Abstractions.csproj Bumps abstractions version.
Review details
  • Files reviewed: 16/16 changed files
  • Comments generated: 2
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread schemas/v4.0.0/devtoolsplugin.schema.json Outdated
Comment thread schemas/v4.0.0/devtoolsplugin.schema.json
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved findings affect Edge Beta startup and IPv4/IPv6 configuration behavior.

Get a fresh assessment by requesting another Copilot review.

Review details

Suppressed comments (1)

schemas/v4.0.0/rc.schema.json:44

  • The removed IPv4 constraint also admits IPv6 addresses, but API URLs are still built by interpolating the address in ApiCommand.PrintApiInfo and ConsoleHotkeyHandler.PrintApiInstructions, producing values such as http://::1:8897 instead of bracketed IPv6 URLs. An IPv6 address that now passes this schema therefore breaks api show and the documented hotkey curl commands; make these URL constructions IPv6-aware before accepting IPv6 here.
    "ipAddress": {
      "type": "string",
      "description": "IP address for Dev Proxy to listen on."
  • Files reviewed: 17/17 changed files
  • Comments generated: 2
  • Review effort level: Lite

Comment thread schemas/v4.0.0/devtoolsplugin.schema.json
Comment thread schemas/v4.0.0/rc.schema.json
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

IPv6 system-proxy formatting remains unresolved, and documentation still references v3.0.0 schemas.

Review details

Suppressed comments (2)

DevProxy/config-templates/devproxyrc.json:2

  • This version bump leaves the repository's Dev Proxy skill documentation examples pinned to v3.0.0 (for example, skills/dev-proxy/references/configuration.md:13,31 and skills/dev-proxy/references/mock-api-responses.md:23,34,49). Those examples are user-facing and the same documentation requires the schema version to match the installed version, so after installing 4.0.0 they still point to stale schemas and omit the v4 changes. Update the embedded schema URLs as part of this bump.
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rc.schema.json",

schemas/v4.0.0/rc.schema.json:50

  • This newly permits IPv6 bind addresses, but the default asSystemProxy path still formats the Windows ProxyServer value with SystemProxyAddress.ToHostPort, which returns ::1:port without IPv6 brackets. That value is ambiguous/malformed as a host-port endpoint, so IPv6 configurations can start Kestrel but fail to register a usable Windows system proxy. Format IPv6 hosts as [address]:port (and add coverage) or keep IPv6 out of the schema until system-proxy registration handles it.
          "format": "ipv4"
        },
        {
          "format": "ipv6"
        }
  • Files reviewed: 22/22 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Unresolved IPv6 wildcard URL/system-proxy normalization and stale v3 installation references remain.

Review details

Suppressed comments (6)

DevProxy.Abstractions/Proxy/SystemProxyAddress.cs:49

  • The v4 config schema now accepts any valid IPv6 spelling, but ResolveHost still recognizes only the literal "::" as the IPv6 wildcard. A valid value such as ::0 or 0:0:0:0:0:0:0:0 therefore binds IPv6Any while the system-proxy registration uses that non-dialable address, so enabling the system proxy breaks clients; normalize parsed IPAddress.IPv6Any (and IPAddress.Any) instead of comparing string literals.
        if (IPAddress.TryParse(host, out var address) && address.AddressFamily == AddressFamily.InterNetworkV6)
        {
            host = $"[{host}]";

DevProxy/Commands/ApiCommand.cs:46

  • api show also reports a client-facing URL, but it preserves the valid wildcard bind :: and produces http://[::]:<port>, which cannot be used to call the API. Use the same wildcard-to-client-host normalization as the other API URL paths.
        var baseUrl = new UriBuilder(Uri.UriSchemeHttp, ipAddress, apiPort).Uri.GetLeftPart(UriPartial.Authority);

DevProxy/Commands/DevProxyCommand.cs:246

  • The command help is another client-facing endpoint and now formats :: as http://[::]:<port>/swagger. Because :: is an unspecified bind address rather than a destination, the advertised OpenAPI URL is unusable for this valid v4 configuration; normalize the host before constructing it.
        ILogger<DevProxyCommand> logger) : base($"Start Dev Proxy\n\nAPI:\n  Dev Proxy exposes a REST API for runtime management.\n  OpenAPI spec: {new UriBuilder(Uri.UriSchemeHttp, proxyConfiguration.IPAddress ?? "127.0.0.1", proxyConfiguration.ApiPort).Uri.GetLeftPart(UriPartial.Authority)}/swagger\n  Use --api-port to configure (default: {proxyConfiguration.ApiPort}).\n  Run 'devproxy api show' for more information.")

DevProxy/Commands/DevProxyCommand.cs:317

  • If the API address feature is unavailable, this fallback persists/logs a URL built from the raw bind address. With the newly supported ipAddress: "::", that becomes http://[::]:<port>, so detached readiness/status requests can target an unusable endpoint. Normalize the fallback host before creating the URI, consistent with SystemProxyAddress.ResolveHost.
                var address = serverAddresses?.Addresses.FirstOrDefault() ??
                    new UriBuilder(Uri.UriSchemeHttp, _proxyConfiguration.IPAddress, _proxyConfiguration.ApiPort).Uri.GetLeftPart(UriPartial.Authority);

DevProxy/Proxy/ConsoleHotkeyHandler.cs:57

  • The v4 schema now allows the IPv6 wildcard ::, but this client-facing URL uses the raw bind address. For that valid configuration it emits http://[::]:8897/proxy, and the unspecified address is not dialable, so every generated curl command fails. Normalize wildcard binds to a client host (the existing SystemProxyAddress.ResolveHost helper does this) before building the URL, and cover :: in the test.
        var baseUrl = new UriBuilder(Uri.UriSchemeHttp, configuration.IPAddress, configuration.ApiPort).Uri.GetLeftPart(UriPartial.Authority) + "/proxy";

skills/dev-proxy/SKILL.md:82

  • The schema examples are now hard-coded to v4, but this skill still links to installation and CI/CD snippets that install/pin v3.0.0. Following the skill can therefore pair these v4 schema URLs with a v3 binary, contradicting the rule below that the schema version must match the installed version; update those snippets to 4.0.0 or explicitly label them as historical.
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rc.schema.json",
  • Files reviewed: 30/30 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Explicit HTTP port 80 is omitted, breaking port-conflict checks and endpoint consistency.

Review details

Suppressed comments (1)

DevProxy.Abstractions/Proxy/SystemProxyAddress.cs:48

  • UriBuilder omits the explicit port when it is HTTP's default port 80, so this helper returns http://host instead of the configured http://host:80. That breaks the existing daemon port-conflict check, which matches ApiUrl by its :80 suffix, and makes the reported endpoint inconsistent with the configured port. Compose the authority from the normalized host and an explicit port instead.
        new UriBuilder(Uri.UriSchemeHttp, ResolveHost(ipAddress), port).Uri.GetLeftPart(UriPartial.Authority);
  • Files reviewed: 32/32 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

Resolve bracketed IPv6 wildcard normalization and document the new DevTools options.

Review details

Suppressed comments (2)

Previously missed (1) — in code that hasn't changed since the last review.

DevProxy/Commands/DevProxyCommand.cs:318

  • When the API is bound to the IPv6 wildcard (::), Kestrel exposes an address such as http://[::]:8897. Uri.Host preserves the brackets, so ResolveHost cannot parse it as IPAddress.IPv6Any; this stores http://[::]:8897 in daemon state, which is not a usable client endpoint for status/stop requests. Use serverUri.DnsSafeHost (or otherwise strip the URI brackets before normalization) so the wildcard is converted to loopback.

schemas/v4.0.0/devtoolsplugin.schema.json:22

  • The v4 schema now advertises EdgeBeta and preferredBrowserPath, but the user-facing skill tables still list only Edge, EdgeDev, and Chrome and omit the executable-path option (skills/dev-proxy/references/configuration.md:291 and skills/dev-proxy/references/plugin-catalog.md:140). Users following these references will miss valid v4 DevTools settings; update both tables with the new options.
      "description": "Which browser to use to launch Dev Tools. Supported values: Edge, EdgeDev, Chrome, EdgeBeta. Default: Edge."
    },
    "preferredBrowserPath": {
      "type": "string",
      "description": "Path to the browser executable. When specified, overrides preferredBrowser."
  • Files reviewed: 32/32 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

The reviewed changes have no unresolved issues blocking approval.

Review details
  • Files reviewed: 33/33 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@garrytrinder
garrytrinder enabled auto-merge (squash) September 18, 2026 13:07
@garrytrinder
garrytrinder merged commit fa652bf into dotnet:main Sep 18, 2026
6 checks passed
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.

3 participants