Skip to content

Release 2.13: ProjectTemplate resync and CI storage cleanup guard - #445

Merged
ptr727 merged 13 commits into
mainfrom
promote-develop-to-main
Jun 24, 2026
Merged

Release 2.13: ProjectTemplate resync and CI storage cleanup guard#445
ptr727 merged 13 commits into
mainfrom
promote-develop-to-main

Conversation

@ptr727

@ptr727 ptr727 commented Jun 24, 2026

Copy link
Copy Markdown
Owner

Maintenance promotion of develop to main. version.json is unchanged (2.13 on both branches), so NBGV advances only main's height — no minor bump.

Why a promotion branch (not a direct develop->main PR)

develop and main have diverged in commit history (parallel Dependabot/codegen PRs target both branches, and the merge-base is old), so a direct develop->main merge conflicts on the template-carried files (e.g. main still has a standalone ## Versioning block in copilot-instructions.md that the lean resync intentionally drops). develop is forward-only and squash-only, so it can't take a back-merge to resolve. This branch merges main into a branch off develop and resolves every conflict to develop's content, so the result tree is byte-identical to develop while preserving main as a merge parent. (git diff develop on this branch is empty.)

What's promoted (content diff vs main = the resync files only)

Notes

  • Merge method is merge-commit (preserves develop's commit list as a second parent), per branch protection.
  • Merging does not publish — publishing is the weekly schedule / manual dispatch only.
  • All earlier code/Docker/Make changes already match between the branches; this promotion carries no functional code change.

ptr727 and others added 13 commits June 8, 2026 12:08
Isolated version bump establishing the develop-leads invariant: raises
`develop`'s minor from `2.12` to `2.13` so develop's NBGV prereleases
sort above main's last stable `2.12.x`. Standalone version-only change
per the versioning policy.
Propagates the versioning rule from ptr727/ProjectTemplate: `develop`
leads `main` by a minor (after a `develop -> main` release, bump
develop's minor via an isolated `bump-version-X.Y` PR so develop's
prerelease image tags sort above main's stable), and maintenance
promotions hold main's version. Added a Versioning section to AGENTS.md
and `.github/copilot-instructions.md".
This PR updates the codegen files.

Co-authored-by: ptr727-codegen[bot] <275599072+ptr727-codegen[bot]@users.noreply.github.com>
This PR updates the codegen files.

Co-authored-by: ptr727-codegen[bot] <275599072+ptr727-codegen[bot]@users.noreply.github.com>
Updated
[Microsoft.Extensions.Http.Resilience](https://github.com/dotnet/extensions)
from 10.6.0 to 10.7.0.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Extensions.Http.Resilience's
releases](https://github.com/dotnet/extensions/releases)._

## 10.7.0

v10.7.0 graduates the
[Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes](https://www.nuget.org/packages/Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes)
package to stable. The package registers a Kubernetes-aware
`ResourceQuotaProvider` that reads the pod's CPU and memory requests and
limits and exposes them to
`Microsoft.Extensions.Diagnostics.ResourceMonitoring` as baseline and
maximum quotas, which then feed the request and limit dimensions of the
published resource utilization metrics. The companion `ResourceQuota`
and `ResourceQuotaProvider` types in
`Microsoft.Extensions.Diagnostics.ResourceMonitoring` graduate to stable
in the same change so that consumers can implement custom quota
providers without taking an experimental dependency.

On the AI side, `Microsoft.Extensions.AI.OpenAI` moves to OpenAI 2.11.0
and fixes a deserialization bug in `ToolJson.AdditionalProperties` so
that JSON Schema `additionalProperties` values shaped as sub-schema
objects (for example `{"type":"string"}`) are preserved instead of
throwing during deserialization. `HostedFileContent.SizeInBytes` and
`HostedFileContent.CreatedAt` graduate to stable since both values are
consistently available across hosted-file providers, while `Purpose` and
`Scope` remain experimental as provider-shaped vocabulary.
`FunctionInvokingChatClient` drops a backward-compat path that
auto-marked `ToolApprovalResponseContent` entries with
`InformationalOnly: true`; consumers that need to continue accepting
sessions serialized before #​7468 can use the sample
`ApprovalHistoryNormalizingChatClient` middleware added in the test
project.

## Experimental API Changes

### Now Stable

* `Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes`
package is now stable #​7253
* Resource Monitoring `ResourceQuota` and `ResourceQuotaProvider` APIs
are now stable (previously `EXTEXP0008`) #​7253
* `HostedFileContent.SizeInBytes` and `HostedFileContent.CreatedAt` are
now stable (previously `MEAI001`) #​7513

## What's Changed

### AI

* Graduate HostedFileContent.SizeInBytes and HostedFileContent.CreatedAt
#​7513 by @​jozkee (co-authored by @​Copilot)
* Remove backward-compat InformationalOnly case from FICC; suggest
middleware workaround #​7538 by @​jozkee (co-authored by @​Copilot)
* Upgrade OpenAI package from 2.10.0 to 2.11.0 #​7544 by @​jozkee
(co-authored by @​Copilot)
* Fix ToolJson.AdditionalProperties to accept sub-schema objects #​7546
by @​jozkee (co-authored by @​Copilot)

### Diagnostics, Health Checks, and Resource Monitoring

* Move Microsoft.Extensions.Diagnostics.ResourceMonitoring.Kubernetes to
stable #​7253 by @​amadeuszl (co-authored by @​Copilot)

## Repository Infrastructure Updates

* [main] Update dependencies from dotnet/arcade #​7521
* Bump dotnet-reportgenerator-globaltool from 5.5.9 to 5.5.10 #​7522
* Bump dotnet-coverage from 18.6.2 to 18.7.0 #​7530
* Bump PowerShell from 7.6.1 to 7.6.2 #​7531
* Bump qs from 6.15.1 to 6.15.2 in
/src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript
#​7532
* [main] Update dependencies from dotnet/arcade #​7534
* Bump tmp from 0.2.5 to 0.2.6 in
/src/Libraries/Microsoft.Extensions.AI.Evaluation.Reporting/TypeScript
#​7537

## Acknowledgements

* @​ericstj submitted issue #​7509 (resolved by #​7544)
* @​scottt732 submitted issue #​7540 (resolved by #​7546)
* @​DeagleGross @​wtgodbe @​dariusclay @​evgenyfedorov2 @​peterwald
@​PranavSenthilnathan @​shyamnamboodiripad @​stephentoub @​tarekgh
reviewed pull requests

**Full Changelog**:
dotnet/extensions@v10.6.0...v10.7.0


Commits viewable in [compare
view](dotnet/extensions@v10.6.0...v10.7.0).
</details>

Updated [System.CommandLine](https://github.com/dotnet/dotnet) from
2.0.8 to 2.0.9.

<details>
<summary>Release notes</summary>

_Sourced from [System.CommandLine's
releases](https://github.com/dotnet/dotnet/releases)._

No release notes found for this version range.

Commits viewable in [compare
view](https://github.com/dotnet/dotnet/commits).
</details>

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Updated
[dotnet-outdated-tool](https://github.com/dotnet-outdated/dotnet-outdated)
from 4.8.0 to 4.8.1.

<details>
<summary>Release notes</summary>

_Sourced from [dotnet-outdated-tool's
releases](https://github.com/dotnet-outdated/dotnet-outdated/releases)._

## 4.8.1

## What's Changed
* Add `#:sdk` support for .NET file-based apps by @​devlead in
dotnet-outdated/dotnet-outdated#755

## New Contributors
* @​devlead made their first contribution in
dotnet-outdated/dotnet-outdated#755

**Full Changelog**:
dotnet-outdated/dotnet-outdated@v4.8.0...v4.8.1

Commits viewable in [compare
view](dotnet-outdated/dotnet-outdated@v4.8.0...v4.8.1).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=dotnet-outdated-tool&package-manager=nuget&previous-version=4.8.0&new-version=4.8.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…oup (#435)

Bumps the actions-deps group with 1 update:
[actions/checkout](https://github.com/actions/checkout).

Updates `actions/checkout` from 6 to 7
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/releases">actions/checkout's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>block checking out fork pr for pull_request_target and workflow_run
by <a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
<li>Bump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the
minor-actions-dependencies group across 1 directory by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://github.com/actions/checkout/pull/2458">actions/checkout#2458</a></li>
<li>Bump flatted from 3.3.1 to 3.4.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://github.com/actions/checkout/pull/2460">actions/checkout#2460</a></li>
<li>Bump js-yaml from 4.1.0 to 4.2.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://github.com/actions/checkout/pull/2461">actions/checkout#2461</a></li>
<li>Bump <code>@​actions/core</code> and
<code>@​actions/tool-cache</code> and Remove uuid by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://github.com/actions/checkout/pull/2459">actions/checkout#2459</a></li>
<li>upgrade module to esm and update dependencies by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://github.com/actions/checkout/pull/2463">actions/checkout#2463</a></li>
<li>Bump the minor-npm-dependencies group across 1 directory with 3
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://github.com/actions/checkout/pull/2462">actions/checkout#2462</a></li>
<li>getting ready for checkout v7 release by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://github.com/actions/checkout/pull/2464">actions/checkout#2464</a></li>
<li>update error wording by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://github.com/actions/checkout/pull/2467">actions/checkout#2467</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> made
their first contribution in <a
href="https://github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v6.0.3...v7.0.0">https://github.com/actions/checkout/compare/v6.0.3...v7.0.0</a></p>
<h2>v6.0.3</h2>
<h2>What's Changed</h2>
<ul>
<li>Update changelog by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://github.com/actions/checkout/pull/2357">actions/checkout#2357</a></li>
<li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
<li>Fix checkout init for SHA-256 repositories by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
<li>Update changelog for v6.0.3 by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://github.com/actions/checkout/pull/2446">actions/checkout#2446</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/yaananth"><code>@​yaananth</code></a>
made their first contribution in <a
href="https://github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v6...v6.0.3">https://github.com/actions/checkout/compare/v6...v6.0.3</a></p>
<h2>v6.0.2</h2>
<h2>What's Changed</h2>
<ul>
<li>Add orchestration_id to git user-agent when ACTIONS_ORCHESTRATION_ID
is set by <a
href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
in <a
href="https://github.com/actions/checkout/pull/2355">actions/checkout#2355</a></li>
<li>Fix tag handling: preserve annotations and explicit fetch-tags by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://github.com/actions/checkout/pull/2356">actions/checkout#2356</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v6.0.1...v6.0.2">https://github.com/actions/checkout/compare/v6.0.1...v6.0.2</a></p>
<h2>v6.0.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Update all references from v5 and v4 to v6 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://github.com/actions/checkout/pull/2314">actions/checkout#2314</a></li>
<li>Add worktree support for persist-credentials includeIf by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
<li>Clarify v6 README by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://github.com/actions/checkout/pull/2328">actions/checkout#2328</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v6...v6.0.1">https://github.com/actions/checkout/compare/v6...v6.0.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/checkout/commit/9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0"><code>9c091bb</code></a>
update error wording (<a
href="https://github.com/actions/checkout/issues/2467">#2467</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/1044a6dea927916f2c38ba5aeffbc0a847b1221a"><code>1044a6d</code></a>
getting ready for checkout v7 release (<a
href="https://github.com/actions/checkout/issues/2464">#2464</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/f0282184c7ce73ab54c7e4ab5a617122602e575f"><code>f028218</code></a>
Bump the minor-npm-dependencies group across 1 directory with 3 updates
(<a
href="https://github.com/actions/checkout/issues/2462">#2462</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/d914b262ffc244530a203ab40decab34c3abf34d"><code>d914b26</code></a>
upgrade module to esm and update dependencies (<a
href="https://github.com/actions/checkout/issues/2463">#2463</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/537c7ef99cef6e5ddb5e7ff5d16d14510503801d"><code>537c7ef</code></a>
Bump <code>@​actions/core</code> and <code>@​actions/tool-cache</code>
and Remove uuid (<a
href="https://github.com/actions/checkout/issues/2459">#2459</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/130a169078a413d3a5246a393625e8e742f387f6"><code>130a169</code></a>
Bump js-yaml from 4.1.0 to 4.2.0 (<a
href="https://github.com/actions/checkout/issues/2461">#2461</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/7d09575332117a40b46e5e020664df234cd416f3"><code>7d09575</code></a>
Bump flatted from 3.3.1 to 3.4.2 (<a
href="https://github.com/actions/checkout/issues/2460">#2460</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/0f9f3aa320cb53abeb534aeb54048075d9697a0e"><code>0f9f3aa</code></a>
Bump actions/publish-immutable-action (<a
href="https://github.com/actions/checkout/issues/2458">#2458</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/f9e715a95fcd1f9253f77dd28f11e88d2d6460c7"><code>f9e715a</code></a>
block checking out fork pr for pull_request_target and workflow_run (<a
href="https://github.com/actions/checkout/issues/2454">#2454</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/checkout/compare/v6...v7">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=6&new-version=7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Problem

The daily **CodeGen** action started failing with **exit code 134
(SIGABRT)** — a failed `Debug.Assert(versionSet.Count ==
productInfo.Versions.Count)` in `ImageInfo.CreateImages`. Reproduced
from the WisenetWAVE trace: the online *Latest* regressed below a
version already present as *Stable*, and `ReleaseVersionForward`
restored the old *Latest* by **adding a second row** for `6.1.2.42921`,
so two entries shared a version number and collapsed in the sorted set.

The vendor JSON was valid — our anti-regression merge created the
duplicate.

## Fix

- **`ReleaseVersionForward`**: fold the restored label into the existing
same-version entry instead of adding a duplicate row → `6.1.2[Stable,
Latest]`.
- **`ProductInfo.VerifyNoDuplicateVersions()`**: an all-build guard that
throws (with product + versions) before the version file is written,
covering both the fetch and forward-merge paths. The `Debug.Assert`
stays as a backstop.
- **Defensive vendor parsing** (`ReleasesJsonSchema.VerifyReleases`):
reject `releases.json` that tags one version number with conflicting
publication types; fold benign same-type duplicates.

## Hardening / cleanup

- Consolidated version parsing into
`VersionInfo.NormalizeVersion`/`ParseVersion`, and the version/label
assembly into `ProductInfo.CreateVersionInfo` (shared with the test
mirror, removing the divergence-prone duplication).
- Made failure paths descriptive: replaced context-free
`Debug.Assert`/bare exceptions on the vendor-data paths with messages
carrying product, build number, version, and URL; disambiguated "label
not found" warnings.

## Tests

- WisenetWAVE regression (folds to one `6.1.2` entry with both labels,
no duplicate numbers).
- `VerifyNoDuplicateVersions` throws on duplicates.
- Invalid vendor JSON: throws on conflicting publication types, folds
same-type duplicates.

All 20 tests pass; CSharpier + `dotnet format style` clean.

## Release chore (maintainer-prepared)

Regenerated `Docker/*` and `Make/{Version,Matrix}.json`, release notes
in `README.md` / `HISTORY.md` (Version 2.13), and `version.json` floor
bump to 2.14 (keeps develop a minor ahead).

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The 2.13 release chore (merged in #436) bumped `version.json` to 2.14,
but this release ships as **2.13** (see README/HISTORY). The next-cycle
bump to 2.14 is a separate post-release step per AGENTS.md versioning,
so restore the floor to 2.13.

Only `version.json` changes; no image files, so no smoke build.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Completes the last open item of #418 (realign with
`ptr727/ProjectTemplate`). Items 2–5 were already resolved by #422 and
the rulesets are correct (`develop` squash-only, `main` merge-only,
lowercase names); only `.github/copilot-instructions.md` still diverged.

## Change

Carry the template's whole-file
[`.github/copilot-instructions.md`](https://github.com/ptr727/ProjectTemplate/blob/main/.github/copilot-instructions.md)
(verbatim drop-in): `# Copilot Instructions` → **Commit Messages and
Pull Request Titles** → **GitHub Copilot Review Runbook** (unchanged
from #422) → **When in Doubt**. Drops the NxWitness-specific preamble
(Purpose, Solution Summary, CI Pipeline, standalone Versioning, etc.) —
all already in [AGENTS.md](../blob/develop/AGENTS.md).

### Adaptations (per the carry contract)

- Keep only the .NET `CODESTYLE.md` pointer (drop Python); drop
devcontainer mentions (none here).
- Fill `owner`/`repo` as `ptr727`/`NxWitness` in the runbook snippets;
keep `<N>` placeholders.
- Retarget AGENTS.md cross-links to this repo's sections
(`#release-model` → `#versioning`; keep `#pr-review-etiquette`). The
template's "Files…Must Carry Verbatim" and "Staying in Sync" links point
upstream, since this repo's AGENTS.md has no equivalent sections.

## Out of scope

Versioning is unchanged — it already matches the template; making it
functional is a separate template-level effort.

## Notes

Doc-only, no code. An upstream issue will be filed against
`ptr727/ProjectTemplate` re: the carried file linking to AGENTS.md
sections a derived repo only has if it also carries the template's
AGENTS.md structure.

Closes #418.
Updated [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest)
from 18.6.0 to 18.7.0.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.NET.Test.Sdk's
releases](https://github.com/microsoft/vstest/releases)._

## 18.7.0

## What's Changed
* Add ARM64 msdia140.dll support to test platform packages by
@​jamesmcroft in microsoft/vstest#15689
* Update System.Memory from 4.5.5 to 4.6.3 by @​nohwnd in
microsoft/vstest#15706

## New Contributors
* @​jamesmcroft made their first contribution in
microsoft/vstest#15689

**Full Changelog**:
microsoft/vstest@v18.6.0...v18.7.0

Commits viewable in [compare
view](microsoft/vstest@v18.6.0...v18.7.0).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Microsoft.NET.Test.Sdk&package-manager=nuget&previous-version=18.6.0&new-version=18.7.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Periodic re-sync of the template-carried artifacts against
[`ptr727/ProjectTemplate`](https://github.com/ptr727/ProjectTemplate)
(tip `8a701a9`), plus the staged workspace dictionary/extension change.

## What changed

- **`.github/copilot-instructions.md`** — adopt the template's current
lean Copilot runbook: Merge Gate awareness, "a review with no inline
comments is still a completed review", and round-1 auto-seed polling.
This also fixes the file's LF line-ending drift (`.editorconfig`
mandates CRLF for `.md`) and the regression from #439, which had
realigned to an older/leaner form than the template now ships.
Owner/repo placeholders filled; the per-language pointer drops Python
(this repo is .NET-only).
- **`AGENTS.md`** — carry the upgraded **PR Review Etiquette** contract
verbatim (new **Merge Gate** subsection, "no-findings is a valid
terminal outcome"). Added the **Pull Request Title and Commit Message
Conventions** section that the lean runbook now links to. The `Release
Model` anchor/`PUBLISH_ON_MERGE` reference were adapted to this repo's
`CI Pipeline` section. Fixed a `.Net Format` → `.NET Format` task
reference.
- **`CODESTYLE.md`** — restructure to the template's **General + .NET**
shape; drop the Python section; adapt the project list to
`CreateMatrix`/`CreateMatrixTests` and `InternalsVisibleTo` accordingly.
**Husky.Net is retained** as this repo's style gate (maintainer
decision) — the template dropped it only because hooks don't fit
non-.NET repos.
- **`.editorconfig`, `.markdownlint-cli2.jsonc`** — pull current
comments verbatim.
- **`.vscode/tasks.json`** — rename `.Net` → `.NET`, add `dependsOrder:
sequence` to `.NET Format`, keep the project-specific `Husky.Net Run`
task; updated `.vscode/launch.json` and `.husky/task-runner.json` label
references.
- **`NxWitness.code-workspace`** — the staged change (`hddpool`
dictionary word; swap `gruntfuggly.todo-tree` for
`fanaticpythoner.better-todo-tree`).

## Notes

- Versioning is unchanged; this is a maintenance re-sync.
- Two upstream issues will be filed in `ptr727/ProjectTemplate`: (1)
commit-gate confusion — Husky's absence is a non-.NET-fit concern, not a
recommendation against gates; (2) verbatim-carry coherence gaps where
carried files reference template-only sections/anchors
(`#release-model`, the commit-conventions section,
`#files-and-sections-derived-repos-must-carry-verbatim`).
- Markdownlint clean on all three docs.
Copilot AI review requested due to automatic review settings June 24, 2026 01:45

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Maintenance promotion aligning main with develop by re-syncing ProjectTemplate-carried repository conventions/docs and adding a best-effort GitHub Actions artifact cleanup job to reduce storage usage.

Changes:

  • Re-synced template-carried repo guidance/config files (AGENTS/CODESTYLE/Copilot instructions, editor/workspace config, VS Code tasks/launch, markdownlint config).
  • Standardized .NET task naming (.Net.NET) across VS Code tasks, launch config, and Husky task runner.
  • Added terminal cleanup-artifacts jobs to PR test and publish workflows to delete run artifacts after use (best-effort, non-gating).

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated no comments.

Show a summary per file
File Description
NxWitness.code-workspace Adds workspace dictionary entry and swaps the recommended TODO-tree extension.
CODESTYLE.md Re-structures and clarifies repo-wide + .NET style/verification guidance, including task naming/casing.
AGENTS.md Updates task naming and adds Git/commit/PR-title conventions plus expanded PR review merge gate text.
.vscode/tasks.json Renames .Net tasks to .NET, sequences .NET Format dependencies, and adjusts outdated upgrade arg casing.
.vscode/launch.json Updates preLaunchTask names to match the renamed .NET Build task.
.markdownlint-cli2.jsonc Updates commentary around MD060 configuration (still disabled).
.husky/task-runner.json Renames the Husky task label to .NET Format for consistency with VS Code tasks/docs.
.github/workflows/test-pull-request.yml Adds a best-effort artifact deletion job to reduce Actions storage usage on PR runs.
.github/workflows/publish-release.yml Adds a best-effort artifact deletion job after publishing steps complete.
.github/copilot-instructions.md Replaces the broader guidance doc with a narrower runbook + commit/PR title summary referencing AGENTS/CODESTYLE.
.editorconfig Clarifies JSON section header and adds guidance comments for analyzer suppression placement/scope.

@ptr727
ptr727 merged commit 091e0a8 into main Jun 24, 2026
9 checks passed
@ptr727
ptr727 deleted the promote-develop-to-main branch June 24, 2026 01:49
ptr727 added a commit that referenced this pull request Jun 24, 2026
Maintenance promotion of `develop` to `main`. `version.json` is
unchanged (2.13 on both branches), so NBGV advances only `main`'s height
— no minor bump.

## What's promoted

A single change since the last promotion (#445):
- **Workflow YAML line-ending normalization** (#446):
`.github/dependabot.yml` and the five `.github/workflows/*.yml` that had
drifted to LF are normalized to CRLF, matching `.editorconfig`'s
`*.{yml,yaml}` rule. Whitespace-only; no content or behavior change.

## Notes

- Direct develop->main merge is clean (no conflicts; `main` did not
touch these files since the merge-base).
- Merge method is **merge-commit**, per branch protection.
- Merging does **not** publish — publishing is the weekly schedule /
manual dispatch only.
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