diff --git a/contributing-workflow.md b/contributing-workflow.md index 266c39c1a7..52fa675e9f 100644 --- a/contributing-workflow.md +++ b/contributing-workflow.md @@ -43,7 +43,8 @@ We use and recommend the following workflow: ### Commit Guidelines - It is OK for your PR to include a large number of commits. -- Once your change is accepted, you will be asked to squash your commits into one or some appropriately small number of commits before your PR is merged. +- PRs are merged via the default "Squash and Merge" strategy (see [Merging Pull Requests](#merging-pull-requests)), so your commit history is automatically collapsed into a single commit at merge time. +- If the PR is planned NOT to follow the default squash-and-merge path (for example, when the author requests "Merge and Commit" to preserve a meaningful commit series), you will be asked to squash your commits into one or some appropriately small number of commits before your PR is merged. ## PR - CI Process @@ -63,13 +64,95 @@ If the CI build fails for any reason, the PR issue will be updated with a link t - **Build failures**: Check the CI logs for specific error messages. - **Test failures**: Ensure all tests pass locally before pushing. -- **Merge conflicts**: Rebase your branch against the latest main branch. +- **Merge conflicts**: + - *Before review has started*: Rebase your branch against the latest `main` branch to keep history clean. + - *After a reviewer has started reviewing*: Do **not** rebase. Rebasing rewrites commit history and makes it impossible for reviewers to tell which commits they have already reviewed, forcing them to start over. Instead, resolve conflicts by merging the latest `main` into your branch (`git merge main`) so that previously reviewed commits remain intact and reviewers can pick up where they left off. ### Getting Help - Comment on your PR if you're stuck. - Reach out in [GitHub Discussions](https://github.com/dotnet/SqlClient/discussions) for broader questions. +## Tracking PRs in the GitHub Project + +The [SqlClient Board](https://github.com/orgs/dotnet/projects/588) (dotnet org project #588) is the team's triage board for tracking issues and PRs. When a PR is linked to an issue, its progress is tracked through the project's fields described below. + +### Project Fields + +| Field | Type | Values | Purpose | +|-------|------|--------|---------| +| **Status** | Single select | `To triage`, `Waiting for customer`, `In progress`, `In review`, `In validation`, `Done` | Tracks the current workflow stage of the item | +| **Priority** | Single select | `P0`, `P1`, `P2`, `P3` | Indicates urgency and scheduling priority | +| **Size** | Single select | `XS`, `S`, `M`, `L`, `XL` | Estimates effort/complexity of the work | +| **API Impact** | Single select | `Breaking Change`, `New API`, `None` | Flags whether the change affects public API surface | +| **PM Approved** | Single select | `N/A`, `Pending`, `Approved` | Tracks product manager sign-off for API or behavioral changes | +| **Assignees** | Field | *(GitHub users)* | Who is responsible for the work | +| **Labels** | Field | *(GitHub labels)* | Categorization and area tags | +| **Reviewers** | Field | *(GitHub users)* | Assigned code reviewers | +| **Milestone** | Field | *(GitHub milestones)* | Target release version | +| **Linked pull requests** | Field | *(PR references)* | PRs associated with the issue | +| **Parent issue** | Field | *(issue reference)* | Epic or parent tracking issue | +| **Sub-issues progress** | Field | *(auto-calculated)* | Completion progress of child issues | +| **Comment** | Text | *(free text)* | Additional context or notes | +| **AB-Link** | Text | *(URL)* | Link to Azure Boards work item (if applicable) | + +### Status Stages for PRs + +PRs (and their linked issues) move through the **Status** field to communicate reviewability and progress: + +| Status | What it means for a PR | +|--------|------------------------| +| **To triage** | PR just opened or linked issue is awaiting initial assessment. Maintainers will review scope, assign reviewers, and set priority. | +| **In progress** | Author is actively developing the change. PR may be in Draft state. | +| **In review** | PR is ready for code review. Reviewers are assigned and the author considers the implementation complete. | +| **Waiting for customer** | Review feedback has been given; the PR author needs to respond or push changes. When a reviewer requests changes, they will also apply the **`Author attention needed`** label so the PR is easy to surface in queries and dashboards. Once the author addresses the feedback, they should remove the `Author attention needed` label and move the PR back to `In review`. | +| **In validation** | PR is approved and being validated (CI, manual testing, integration checks) before merge. | +| **Done** | PR has been merged and the associated work is complete. | + +### Status Transitions + +When a reviewer leaves feedback that needs author action, they move the PR to `Waiting for customer` **and** apply the `Author Attention Needed` label. The author removes the label (and updates Status back to `In review`/`In progress`) once the feedback is addressed. + +``` +┌────────────┐ ┌─────────────┐ ┌───────────────────────┐ ┌───────────────┐ ┌──────┐ +│ To triage │──────▶│ In progress │──────▶│ In review │──────▶│ In validation │──────▶│ Done │ +└────────────┘ └─────────────┘ └───────────┬───────────┘ └───────────────┘ └──────┘ + ▲ │ ▲ + │ │ changes │ author addresses + │ │ requested│ feedback (minor) + + │ │ + label │ removes label + │ ▼ │ + │ ┌────────────────────────┐ + │ │ Waiting for customer │ + │ │ + Author Attention │ + │ │ Needed (label) │ + │ └────────────────────────┘ + │ │ + │ │ major rework needed + └────────────────────┘ +``` + +### Additional Field Usage + +- **Priority**: `P0` items are critical fixes that should be reviewed and merged urgently. `P1` items are high priority for the current milestone. `P2`/`P3` items are scheduled as capacity allows. +- **Size**: Helps reviewers estimate review effort. `XS`/`S` PRs should get faster turnaround. `L`/`XL` PRs may need multiple reviewers or phased review. +- **API Impact**: PRs marked `Breaking Change` or `New API` require **PM Approved = Approved** before merge. `ref/` project updates must accompany these PRs. +- **PM Approved**: Set to `Pending` when a PR introduces API changes. Must reach `Approved` before the PR can be merged. `N/A` for internal or non-API changes. + +### Guidelines for Contributors + +1. **Link your PR to an issue** — This ensures the PR appears on the project board and is tracked through the workflow. +2. **Keep Status current** — If you're the author, move your linked issue to `In review` when your PR is ready for feedback. +3. **Respond promptly** — When status is `Waiting for customer` and the **`Author Attention Needed`** label is applied, the team is blocked on your response. Address the feedback, push the updates, **remove the `Author Attention Needed` label**, and move Status back to `In review` (or `In progress` for major rework) so reviewers know the PR is ready for another pass. +4. **Flag API changes early** — Set **API Impact** appropriately so PM review can happen in parallel with code review. +5. **Don't skip validation** — Even after approval, the PR stays in `In validation` until CI passes and any manual verification is complete. + +### Guidelines for Reviewers + +1. **Signal that author action is required** — When your review requests changes (whether via formal "Request changes" or a comment that requires author follow-up), apply the **`Author Attention Needed`** label to the PR and move its linked issue to `Waiting for customer`. This pair (label + status) is what the team uses to find PRs that are blocked on the author versus those still awaiting review. +2. **Don't remove the label yourself** — Leave the `Author Attention Needed` label in place until the author pushes updates addressing the feedback; the author is responsible for removing it when they hand the PR back for review. +3. **Re-review promptly** — Once the author removes the label and Status returns to `In review`, pick the PR back up so it doesn't stall. + ## Stale PR Management The SqlClient repository uses automated workflows to manage inactive pull requests and maintain repository hygiene. @@ -111,6 +194,7 @@ One or more Microsoft team members will review every PR prior to merge. They wil - Address all review comments before the PR can be merged. - Feel free to ask questions if feedback is unclear. - Push additional commits to address feedback (these will be squashed later). +- When a reviewer leaves feedback that needs your action, they will set Status to `Waiting for customer` and apply the **`Author Attention Needed`** label. After you push updates, **remove the `Author Attention Needed` label** and move Status back to `In review` so reviewers know the PR is ready for another pass. ## Merging Pull Requests diff --git a/roadmap.md b/roadmap.md index 4c080e7242..a28e13ed8e 100644 --- a/roadmap.md +++ b/roadmap.md @@ -1,30 +1,131 @@ # Microsoft.Data.SqlClient Roadmap -The Microsoft.Data.SqlClient roadmap communicates project priorities for evolving and extending the scope of the product. We encourage the community to work with us to improve SqlClient driver for these scenarios and extend it for others. +The Microsoft.Data.SqlClient roadmap communicates project priorities for evolving and extending the scope of the product. We encourage the community to work with us to improve the SqlClient driver for these scenarios and extend it for others. + +> **Last updated:** May 2026 +> +> This roadmap is a living document. Priorities and timelines may shift based on community feedback, engineering constraints, and business needs. We update this page regularly to reflect the current state of development. + +--- + +## Release Milestones + +For active release milestones, their target dates, and the changes included, see [SqlClient milestones](https://github.com/dotnet/SqlClient/milestones). + +--- + +## Current Focus Areas + +Our team is actively working on the following high-level themes: + +- **Active** — Currently in development +- **Planned** — Committed for a future milestone with estimated delivery +- **Backlog** — On our radar for future months, not yet scheduled + +### Performance & Reliability + +| Feature | Status | ETA | +|---------|--------|-----| +| Connection pool performance improvements | Active | June 2026 | +| Performance benchmarking suite | Active | June 2026 | +| Phase 1 - Unix async performance — thread starvation in parallel `ExecuteReaderAsync` | Active | September 2026 | +| Phase 2 - Async usage analysis and optimization | Planned | — | + +### New Data Type Support + +| Feature | Status | ETA | +|---------|--------|-----| +| Vector subtype support — `float16` (`Half`) | Active | August 2026 | + +### Observability & Diagnostics + +| Feature | Status | ETA | +|---------|--------|-----| +| OpenTelemetry support | Planned | — | +| Logging improvements | Planned | — | +| Integrate with / expose MSAL logging | Planned | — | + +### API Improvements + +| Feature | Status | ETA | +|---------|--------|-----| +| Expose connection encryption information to clients | Planned | September 2026 | +| Throw `TaskCanceledException` instead of `SqlException` for cancellations | Planned | September 2026 | +| `BeginTransactionAsync` API on `SqlConnection` | Planned | — | + +### Security & Architecture + +| Feature | Status | ETA | +|---------|--------|-----| +| Security hardening activities | Active | Ongoing internally | + +### AI & Developer Tooling + +| Feature | Status | ETA | +|---------|--------|-----| +| `System.Data.SqlClient` → `Microsoft.Data.SqlClient` migration via Modernize with Copilot | Active | September 2026 | +| Modernize SqlClient repository with AI | Active | Ongoing | + +### Engineering & Infrastructure + +| Feature | Status | ETA | +|---------|--------|-----| +| CI/CD pipeline redesign | Active | August 2026 | +| Add SQL Server 2025 to test matrix | Planned | August 2026 | +| Add .NET 10 to test matrix | Planned | August 2026 | +| Converting existing traditional pipelines to Yaml | Active | August 2026 | +| Performance benchmarking pipeline (Internal) | Planned | September 2026 | +--- ## Released Versions -- [Release Notes](release-notes/README.md) - For detailed release notes summarizing of all changes/features released. -- [GitHub Releases](https://github.com/dotnet/sqlclient/releases) - For downloading NuGet Packages and identifying driver releases with changelog notes. +- [Release Notes](release-notes/README.md) — Detailed release notes summarizing all changes and features released. +- [GitHub Releases](https://github.com/dotnet/sqlclient/releases) — NuGet packages and changelog notes for each release. + +--- + +## Community Contributions + +We welcome and value community contributions to Microsoft.Data.SqlClient! To ensure we can maintain quality and alignment with our roadmap, please follow these guidelines: + +### Submitting Pull Requests + +- **New features from community PRs must be driven by creating a GitHub issue first.** Discuss the proposal in the issue before starting implementation. This helps avoid wasted effort and ensures alignment with project goals. +- **Community contributions must not derail the project roadmap.** We prioritize features and fixes according to our published milestones. PRs that conflict with or distract from active roadmap items may be deferred. +- **Our maintainers reserve the right to reject PRs** that do not meet the required criteria to qualify for review. This includes PRs that: + - Lack a corresponding approved issue + - Introduce breaking changes without prior discussion + - Do not follow the project's coding standards and conventions + - Are missing adequate test coverage + - Conflict with work already in progress by the team +- **Bug fixes and small improvements** are generally welcome without a prior issue, but a linked issue helps us triage and prioritize your contribution. + +### What Makes a Great Contribution + +1. **Start with an issue** — File a [feature request](https://github.com/dotnet/SqlClient/issues/new?template=feature_request.md) or [bug report](https://github.com/dotnet/SqlClient/issues/new?template=bug-report.md) and wait for maintainer feedback +2. **Follow the conventions** — See [CONTRIBUTING.md](CONTRIBUTING.md) and [coding guidelines](policy/coding-style.md) +3. **Include tests** — Both unit tests and integration tests where applicable +4. **Keep scope focused** — One feature or fix per PR +5. **Update documentation** — For any public API changes -## Upcoming Ship Dates +### Contribution Workflow -For upcoming release dates, see [SqlClient milestones](https://github.com/dotnet/SqlClient/milestones). +See [contributing-workflow.md](contributing-workflow.md) for details on how PRs are tracked through our review process. -[SqlClient Projects](https://github.com/dotnet/SqlClient/projects) are used by our development team to define roadmap of prioritized work. SqlClient Boards contain issues, pull requests, and other features, development activities that are categorized as cards. Our goal is to be transparent over priorities, work in progress and deliverables. +--- ## Feedback -The best way to give feedback is to create issues in the [dotnet/sqlclient](https://github.com/dotnet/sqlclient) repo. +The best way to give feedback is to create issues in the [dotnet/SqlClient](https://github.com/dotnet/SqlClient) repo. -Although mostly obvious, please give us feedback that will give us insight on the following points: +Please give us feedback that will provide insight on the following: -- Existing features are missing some capability or otherwise don't work well enough. +- Existing features that are missing some capability or otherwise don't work well enough. - Missing features that should be added to the product. - Design choices for a feature that is currently in-progress. -Some important caveats / notes: +Some important caveats: -- It is best to give design feedback quickly for improvements that are in-development. We're unlikely to hold a feature being part of a release on late feedback. +- It is best to give design feedback quickly for improvements that are in development. We're unlikely to hold a feature from a release on late feedback. - We are most likely to include improvements that either have a positive impact on a broad scenario or have very significant positive impact on a niche scenario. This means that we are unlikely to prioritize modest improvements to niche scenarios. - Compatibility will almost always be given a higher priority than improvements.