Skip to content

Preview4 release notes#3992

Draft
mdaigle wants to merge 4 commits intomainfrom
dev/mdaigle/preview4-release-notes
Draft

Preview4 release notes#3992
mdaigle wants to merge 4 commits intomainfrom
dev/mdaigle/preview4-release-notes

Conversation

@mdaigle
Copy link
Contributor

@mdaigle mdaigle commented Feb 27, 2026

In addition to adding new release notes, this pull request also introduces a new, robust workflow for generating release notes by adding a dedicated skill for fetching milestone PRs and significantly expanding the release notes prompt. The main focus is to support multi-package release notes generation, automate PR metadata collection, and provide clear, step-by-step instructions for maintainers.

Key changes include:

Release Notes Prompt Overhaul

  • Multi-package support and detailed instructions:
    The .github/prompts/release-notes.prompt.md file is rewritten to handle multiple packages in the repository, with a registry table specifying how to identify relevant PRs and where to place release notes for each package. It now includes explicit steps for fetching PRs, categorizing changes, enriching feature sections, verifying API names, and updating various documentation files.

  • Integration of new fetch-milestone-prs skill:
    The prompt now relies on a new skill to programmatically fetch all merged PRs for a given milestone, saving their metadata for use in release note generation. This ensures accuracy and repeatability in the release process.

New Skill: fetch-milestone-prs

  • Skill documentation:
    Added .github/skills/fetch-milestone-prs/SKILL.md, which documents when and how to use the skill, prerequisites, output formats, error handling, and integration points with other workflows.

  • Skill implementation:
    Introduced .github/skills/fetch-milestone-prs/fetch-milestone-prs.py, a Python script that uses the GitHub CLI to fetch all merged PRs for a specified milestone, saves each as a JSON file, and creates an index for downstream processing. The script handles error cases, computes helpful derived fields for categorization, and is designed for easy automation.

These changes lay the foundation for a more automated, accurate, and maintainable release process across all packages in the repository.


Most important changes:

Release Notes Process Improvements

  • Major rewrite of .github/prompts/release-notes.prompt.md to support multi-package release notes, provide explicit instructions, and integrate with the new PR-fetching skill.

Skill Addition: PR Metadata Fetching

  • Added .github/skills/fetch-milestone-prs/SKILL.md documenting a new skill for fetching all merged PRs for a milestone, including usage scenarios, prerequisites, and output structure.
  • Implemented .github/skills/fetch-milestone-prs/fetch-milestone-prs.py, a Python script that automates fetching, filtering, and saving PR metadata for a milestone using the GitHub CLI, with robust error handling and output for downstream workflows.

Copilot AI review requested due to automatic review settings February 27, 2026 21:19
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds Preview4 release-note content and introduces a milestone-driven workflow to automate PR metadata collection for multi-package release notes in this repo.

Changes:

  • Added Preview4 release notes for Microsoft.Data.SqlClient 7.0 and related packages (AKV provider 7.0, new Extensions packages 1.0).
  • Added a new fetch-milestone-prs skill + Python script to collect merged milestone PR metadata into a local directory for downstream processing.
  • Overhauled the release-notes prompt to support multi-package release note generation using the new skill.

Reviewed changes

Copilot reviewed 19 out of 20 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
release-notes/template/release-notes-template.md Generalized template guidance for multi-package releases.
release-notes/add-ons/AzureKeyVaultProvider/7.0/README.md Added AKV provider 7.0 release index.
release-notes/add-ons/AzureKeyVaultProvider/7.0/7.0.0-preview4.md Added AKV provider 7.0.0-preview4 release notes.
release-notes/add-ons/AzureKeyVaultProvider/7.0/7.0.0-preview{1,2,3}.md Added placeholder notes indicating no package was shipped for those milestones.
release-notes/README.md Added top-level links/sections for new packages and AKV 7.0.
release-notes/Extensions/Abstractions/1.0/* Added Extensions.Abstractions 1.0 release index + preview1 notes.
release-notes/Extensions/Azure/1.0/* Added Extensions.Azure 1.0 release index + preview1 notes.
release-notes/Extensions/Logging/1.0/* Added Extensions.Logging 1.0 release index + preview1 notes.
release-notes/7.0/README.md Added 7.0.0-preview4 entry.
release-notes/7.0/7.0.0-preview4.md Added core driver 7.0.0-preview4 release notes.
CHANGELOG.md Added 7.0.0-preview4 changelog entry plus pointers to per-package release notes.
.gitignore Ignored generated .milestone-prs/ output.
.github/skills/fetch-milestone-prs/fetch-milestone-prs.py New script to fetch milestone PR metadata using gh api.
.github/skills/fetch-milestone-prs/SKILL.md Documentation for the new milestone PR fetch skill.
.github/prompts/release-notes.prompt.md Rewrote release-notes prompt for multi-package workflow + skill integration.

Comment on lines +13 to +17
([#3638](https://github.com/dotnet/SqlClient/pull/3638)):
- Updated `Azure.Core` to v1.49.0
- Updated `Azure.Security.KeyVault.Keys` to v4.8.0
- Updated `Microsoft.Extensions.Caching.Memory` to v9.0.9 (.NET 9.0)

Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

This change note calls out updating Microsoft.Extensions.Caching.Memory to 9.0.9 specifically for ".NET 9.0", but the AKV provider package doesn’t publish a net9.0-specific asset group. Consider removing the .NET 9.0-specific dependency language here (or clarifying that net9 apps consume the net8 asset) so the note matches what is actually shipped.

Copilot uses AI. Check for mistakes.
Comment on lines +172 to +175
- Microsoft.Bcl.Cryptography 9.0.9
- Microsoft.Data.SqlClient.Extensions.Abstractions 1.0.0-preview1.{build number here}
- Microsoft.Data.SqlClient.Extensions.Logging 1.0.0-preview1.{build number here}
- Microsoft.Data.SqlClient.SNI.runtime 6.0.2
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

The dependency list still contains placeholders ({build number here}) for the Extensions package versions. Release notes should include the actual shipped NuGet versions (or, if intentionally omitted, remove the placeholder and describe how to resolve the versions) to avoid publishing incomplete documentation.

Copilot uses AI. Check for mistakes.
Comment on lines +62 to +66
For significant features or bug fixes that reference a GitHub issue:

1. Read the referenced issue to understand the original request, use cases, and community context.
2. Use this information to write richer *Who Benefits* and *Impact* sections — don't just restate the PR description.
3. Include the issue link alongside PR links (e.g., `([#1108](https://github.com/dotnet/SqlClient/issues/1108), [#3680](https://github.com/dotnet/SqlClient/pull/3680))`).
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

Step 3 requires reading referenced GitHub issues for context, but the prompt’s tool list does not include any GitHub issue/PR retrieval tool. Either re-add a GitHub tool (e.g., github/search_issues) or revise this step so it can be completed with the available tools.

Suggested change
For significant features or bug fixes that reference a GitHub issue:
1. Read the referenced issue to understand the original request, use cases, and community context.
2. Use this information to write richer *Who Benefits* and *Impact* sections — don't just restate the PR description.
3. Include the issue link alongside PR links (e.g., `([#1108](https://github.com/dotnet/SqlClient/issues/1108), [#3680](https://github.com/dotnet/SqlClient/pull/3680))`).
For significant features or bug fixes that reference a GitHub issue in the PR title or body:
1. Use the PR information (title, body, labels, and any mentioned issue numbers) from the JSON files to understand the original request, use cases, and community context. Do not attempt to fetch or read GitHub issues directly.
2. Use this information to write richer *Who Benefits* and *Impact* sections — don't just restate the PR description.
3. When the PR references one or more issues, include the issue link(s) alongside PR links (e.g., `([#1108](https://github.com/dotnet/SqlClient/issues/1108), [#3680](https://github.com/dotnet/SqlClient/pull/3680))`).

Copilot uses AI. Check for mistakes.
Comment on lines +45 to +52

### .NET 9.0

- Azure.Core 1.49.0
- Azure.Security.KeyVault.Keys 4.8.0
- Microsoft.Data.SqlClient 7.0.0-preview4
- Microsoft.Data.SqlClient.Extensions.Logging 1.0.0-preview1
- Microsoft.Extensions.Caching.Memory 9.0.9
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

The Dependencies section includes a ".NET 9.0" subsection, but the AzureKeyVaultProvider package NuSpec only ships net462 and net8.0 assets (net9 consumers use the net8 asset). The release notes should omit the .NET 9.0 subsection (or clearly mark it as not shipped) to avoid implying a published net9 TFM.

Suggested change
### .NET 9.0
- Azure.Core 1.49.0
- Azure.Security.KeyVault.Keys 4.8.0
- Microsoft.Data.SqlClient 7.0.0-preview4
- Microsoft.Data.SqlClient.Extensions.Logging 1.0.0-preview1
- Microsoft.Extensions.Caching.Memory 9.0.9

Copilot uses AI. Check for mistakes.
Comment on lines +41 to +49
"""Call the GitHub REST API with pagination via `gh api --paginate`."""
cmd = ["gh", "api", "--paginate", endpoint]
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8", errors="replace")
if result.returncode != 0:
print(f"Error calling gh api {endpoint}:", file=sys.stderr)
print(result.stderr, file=sys.stderr)
sys.exit(1)
# --paginate concatenates JSON arrays, producing valid JSON
return json.loads(result.stdout)
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

The comment says --paginate “produces valid JSON”, but that’s not reliably true for multi-page results. This is likely to break milestone lookups/fetches once there is more than one page of results; consider updating the implementation and/or comment to reflect the actual behavior.

Suggested change
"""Call the GitHub REST API with pagination via `gh api --paginate`."""
cmd = ["gh", "api", "--paginate", endpoint]
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8", errors="replace")
if result.returncode != 0:
print(f"Error calling gh api {endpoint}:", file=sys.stderr)
print(result.stderr, file=sys.stderr)
sys.exit(1)
# --paginate concatenates JSON arrays, producing valid JSON
return json.loads(result.stdout)
"""Call the GitHub REST API with pagination via `gh api --paginate` and aggregate all pages."""
cmd = ["gh", "api", "--paginate", endpoint]
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8", errors="replace")
if result.returncode != 0:
print(f"Error calling gh api {endpoint}:", file=sys.stderr)
print(result.stderr, file=sys.stderr)
sys.exit(1)
# `gh api --paginate` prints one JSON payload per page, typically one array per line.
# This function parses each non-empty line and aggregates all items into a single list.
items = []
for line in result.stdout.splitlines():
line = line.strip()
if not line:
continue
try:
page = json.loads(line)
except json.JSONDecodeError as ex:
print(f"Failed to parse paginated gh api output for {endpoint}: {ex}", file=sys.stderr)
sys.exit(1)
if isinstance(page, list):
items.extend(page)
else:
items.append(page)
return items

Copilot uses AI. Check for mistakes.
Comment on lines +72 to +74
1. Search the source code (`src/Microsoft.Data.SqlClient/src/`) to confirm the exact name, type, and signature.
2. Check XML doc comments for usage warnings or caveats that should be included in the *Impact* section.
3. Never guess API names from PR titles — always verify against the actual code.
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

Step 4 requires searching the source tree to verify API names/signatures, but the prompt’s tool list doesn’t include a code search capability. Add a search tool (e.g., codebase/search) or revise the step so it’s achievable with the available tools.

Suggested change
1. Search the source code (`src/Microsoft.Data.SqlClient/src/`) to confirm the exact name, type, and signature.
2. Check XML doc comments for usage warnings or caveats that should be included in the *Impact* section.
3. Never guess API names from PR titles — always verify against the actual code.
1. Open the relevant implementation file(s) under `src/Microsoft.Data.SqlClient/src/` using `read/readFile` and confirm the exact name, type, and signature.
2. In those files, check XML doc comments for usage warnings or caveats that should be included in the *Impact* section.
3. Never guess API names from PR titles — always verify them against the actual implementation code or reference assemblies you can open.

Copilot uses AI. Check for mistakes.
Comment on lines +41 to +51
"""Call the GitHub REST API with pagination via `gh api --paginate`."""
cmd = ["gh", "api", "--paginate", endpoint]
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8", errors="replace")
if result.returncode != 0:
print(f"Error calling gh api {endpoint}:", file=sys.stderr)
print(result.stderr, file=sys.stderr)
sys.exit(1)
# --paginate concatenates JSON arrays, producing valid JSON
return json.loads(result.stdout)


Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

run_gh_api_paginated() calls json.loads(result.stdout) after gh api --paginate. For multi-page results, --paginate can emit multiple JSON payloads (one per page), which will make this parse fail. Use --slurp/--jq or explicitly merge pages so stdout is guaranteed to be valid JSON.

Suggested change
"""Call the GitHub REST API with pagination via `gh api --paginate`."""
cmd = ["gh", "api", "--paginate", endpoint]
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8", errors="replace")
if result.returncode != 0:
print(f"Error calling gh api {endpoint}:", file=sys.stderr)
print(result.stderr, file=sys.stderr)
sys.exit(1)
# --paginate concatenates JSON arrays, producing valid JSON
return json.loads(result.stdout)
"""Call the GitHub REST API and aggregate all paginated results."""
all_items = []
page = 1
while True:
# Append page parameter while preserving any existing query string.
separator = "&" if "?" in endpoint else "?"
paged_endpoint = f"{endpoint}{separator}page={page}"
page_data = run_gh_api(paged_endpoint)
# Stop when no more results are returned.
if not page_data:
break
if isinstance(page_data, list):
all_items.extend(page_data)
else:
all_items.append(page_data)
page += 1
return all_items

Copilot uses AI. Check for mistakes.
argument-hint: <milestone>
agent: agent
tools: ['github/search_issues', 'edit/createFile', 'edit/editFiles', 'read/readFile']
tools: ['edit/createFile', 'edit/editFiles', 'read/readFile']
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

The prompt’s tool list only includes file read/edit tools, but later steps require reading GitHub issues/PR context and searching the codebase to verify API names. Add the necessary tools (e.g., github/search_issues and codebase/search) or adjust the steps so the prompt is runnable as written.

Suggested change
tools: ['edit/createFile', 'edit/editFiles', 'read/readFile']
tools: ['edit/createFile', 'edit/editFiles', 'read/readFile', 'github/search_issues', 'codebase/search']

Copilot uses AI. Check for mistakes.
@paulmedynski paulmedynski self-assigned this Feb 27, 2026
Copy link
Contributor

@paulmedynski paulmedynski left a comment

Choose a reason for hiding this comment

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

These notes look amazing! We're releasing AKV 7.0.0 Preview 1, not Preview 4, so that's the only correction. We need to fill in the actual build numbers once they are known.


| Release Date | Version | Notes |
| :-- | :-- | :--: |
| 2026-02-27 | 7.0.0-preview4 | [Release Notes](7.0.0-preview4.md) |
Copy link
Contributor

Choose a reason for hiding this comment

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

{build number here}

@@ -0,0 +1,5 @@
# Release Notes

## 7.0.0-preview1
Copy link
Contributor

Choose a reason for hiding this comment

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

We're actually releasing AKV 7.0.0-preview1, not preview4.


| Release Date | Description | Notes |
| :-- | :-- | :--: |
| 2026-02-27 | 7.0.0-preview4 | [Release Notes](7.0.0-preview4.md) |
Copy link
Contributor

Choose a reason for hiding this comment

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

Build number here, once we know it.


- Applications using Azure AD authentication with `Microsoft.Data.SqlClient` 7.0+ must install this package. No code changes are required beyond adding the NuGet package reference.

### Fixed
Copy link
Contributor

Choose a reason for hiding this comment

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

No need to include this section.

- Released Microsoft.Data.SqlClient.Extensions.Abstractions 1.0.0-preview1. See [release notes](release-notes/Extensions/Abstractions/1.0/1.0.0-preview1.md).
- Released Microsoft.Data.SqlClient.Extensions.Azure 1.0.0-preview1. See [release notes](release-notes/Extensions/Azure/1.0/1.0.0-preview1.md).
- Released Microsoft.Data.SqlClient.Extensions.Logging 1.0.0-preview1. See [release notes](release-notes/Extensions/Logging/1.0/1.0.0-preview1.md).
- Released Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider 7.0.0-preview4. See [release notes](release-notes/add-ons/AzureKeyVaultProvider/7.0/7.0.0-preview4.md).
Copy link
Contributor

Choose a reason for hiding this comment

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

preview1

Copy link
Contributor

@samsharma2700 samsharma2700 left a comment

Choose a reason for hiding this comment

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

Notes look good just need to address the comments.

- Fixed an edge case in `TdsParserStateObject.TryReadPlpBytes` where zero-length reads returned `null` instead of an empty array.
([#3872](https://github.com/dotnet/SqlClient/pull/3872))

- Fixed `ActiveDirectoryInteractive` authentication failure caused by the Azure package targeting only .NET Standard 2.0, which omitted necessary conditional compilation paths.
Copy link
Contributor

Choose a reason for hiding this comment

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

This shoudl be removed

- Minor improvements to Managed SNI tracing.
([#3859](https://github.com/dotnet/SqlClient/pull/3859))

- Reverted public visibility of internal interop enums that were accidentally made public during the project merge.
Copy link
Contributor

Choose a reason for hiding this comment

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

Is this needed?

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.

5 participants