Visitar URL original
Promote the Hub Resync to Main by ptr727 · Pull Request #601 · ptr727/Utilities · GitHub
Skip to content

Promote the Hub Resync to Main - #601

Merged
ptr727 merged 4 commits into
mainfrom
develop
Nov 12, 2026
Merged

ptr727 merged 4 commits into
mainfrom
develop

Conversation

@ptr727

@ptr727 ptr727 commented Nov 12, 2026

Copy link
Copy Markdown
Owner

Summary

Promotes the hub resync to main. It carries four pull requests, all merged into develop. The resync is against hub ptr727/ProjectTemplate at 009d3e5e:

main was also given the CA2027 fix directly in #599, so its own Dependabot pull requests build again.

Merge

A test merge of develop into main auto-merges cleanly, and its tree equals develop's tree (0b7af164). So this is a plain develop -> main pull request with no promote/ branch.

Release

releaseTrigger is two-phase, so a maintainer merging this publishes nothing by itself. Release goes through an explicit publish-release.yml dispatch on main. Among the publisher's push paths, only Directory.Packages.props differs from main, through the test-only bump in #595.

Audit

audit run 2026-11-12T23:18:04Z | hub 009d3e5e | branch override develop reports 0 defect findings on develop. Two date-only intent advisories remain, on .editorconfig-checker.json and version.json, whose content is this repository's own. Repository settings were applied from the hub at 009d3e5e with repo-config/configure.sh apply, adding the history-data label, and check reports a match.

Review coverage

Each feature pull request met every Merge Gate item at its merged head. #597 had a Copilot round with a file table naming all 34 changed files, and its one verdict headline was answered. #598 and #600 each had an attested local pass covering the merged head. #600's three Copilot threads were resolved: one fixed, and two declined as carried hub content, tracked in ptr727/ProjectTemplate#4108. #595 is a Dependabot dependency bump merged green.

Findings Routed to the Hub

🤖 Generated with Claude Code

dependabot Bot and others added 4 commits November 12, 2026 14:55
Updated [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest)
from 18.11.1 to 18.12.0.

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

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

## 18.12.0

## Security fix

This release includes the fix for CVE-2026-105544, an elevation of
privilege vulnerability in the VSTest artifact post-processor. The
post-processor could consume a forged `executionComplete.json` written
by another local user, and then run attacker-controlled output handling.

Affected: `Microsoft.TestPlatform.CLI` 18.11.0 and earlier. Every
version from 18.11.1 on is fixed, including 18.12.0.

`Microsoft.TestPlatform.CLI` is the VSTest build that we ship into the
.NET SDK. The recommended way to get this fix is to update your .NET SDK
to the latest patched version, see the advisory for the SDK versions.

The fix is also released in the `Microsoft.TestPlatform.CLI` package,
for completeness. That package is rarely used directly. It is not a
dependency of `Microsoft.NET.Test.Sdk` or `Microsoft.TestPlatform`, so
those packages do not bring it in.

Details: microsoft/vstest#16654 and
dotnet/announcements#517

Using custom Docker images or Nano Server? See
microsoft/vstest#16652

## What's Changed
* Fix TestCaseStart/Stop events dropped for data-driven tests with
shared TestCase.Id by @​nohwnd in
microsoft/vstest#16033
* Stop the discovery manager factory from shadowing discoveryCriteria by
@​nohwnd in microsoft/vstest#16391
* Gate the HTTP link checker on a fingerprint of the broken links by
@​nohwnd in microsoft/vstest#16413
* Quote boolean conditions in shipped Microsoft.TestPlatform.targets by
@​nohwnd in microsoft/vstest#16404
* Obsolete API hygiene: the compatibility-safe changes by @​azat-msft in
microsoft/vstest#16420
* Add xxHash128 test ids, available but not default by @​azat-msft in
microsoft/vstest#16378
* Isolate attachment manager test temporary files by @​mmitche in
microsoft/vstest#16463
* Test ids report logger by @​azat-msft in
microsoft/vstest#16443
* Isolate code coverage files in published output by @​azat-msft in
microsoft/vstest#16483
* Preserve OutputType for Android test projects by @​jonathanpeppers in
microsoft/vstest#16496
* Fix dotnet host resolution under proot (ARM64/Termux) by @​azat-msft
in microsoft/vstest#16462
* Mark the xxHash128 test id API as experimental by @​azat-msft in
microsoft/vstest#16465
* Ship Microsoft.Diagnostics.NETCore.Client in Microsoft.TestPlatform
and Portable packages by @​nohwnd in
microsoft/vstest#16633
* Fix localized resource paths in CLI source-build/non-Windows packages
by @​nohwnd in microsoft/vstest#16644


**Full Changelog**:
microsoft/vstest@v18.11.0...v18.12.0



Commits viewable in [compare
view](microsoft/vstest@v18.11.1...v18.12.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.11.1&new-version=18.12.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>
## Summary

CI is red on both `develop` and `main`. The runner's .NET SDK 10.0.404
reports CA2027 as an error twice in `UtilitiesTests/LoopbackServer.cs`.
The flagged lines are the two teardown waits in `Dispose()`, each shaped
`Task.WhenAny(task, Task.Delay(timeout))`, where the delay's timer
outlives the task it races. This blocks every pull request, including
the hub resync in #597 and the `main` Dependabot bump in #596.

Each wait is now `Task.WaitAny([task], timeout)`. It is bounded by the
same timeout, never rethrows a faulted or canceled task, and leaves no
timer behind. So the existing teardown contract and its comment still
hold, and the `_ = task.Exception` lines after each wait still observe
any fault. The change is test-only, so no packaged code changes.

`main` takes its own dependency bumps here, so the same two-line change
is opened against both branches.

## Verification

- `dotnet build` passes with zero warnings and zero errors, and `dotnet
format style --verify-no-changes` is clean.
- `dotnet test` passes 212 of 212.
- CA2027 reproduced locally before the change and is gone after it.
- Local strict review ran three passes. The first flagged two added
comments the prose gate refuses, and they were removed. The second
pointed out that `Task.WaitAny` already does what a hand-built helper
did, so the helper went. The final pass over the two-line change found
nothing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
## Summary

Resyncs the carried instruction set and the Skills tree with hub
`ptr727/ProjectTemplate` at `009d3e5e`. This is step 1 of the hub's
`RESYNC.md`, together with step 3's re-vendor of the manifest-owned
trees, which that file puts in the same pull request.

- `AGENTS.md`, `GOVERNANCE.md`: the stale verbatim sections are
re-vendored with `scripts/carry.py apply-sections`. The repository's own
preamble, "Devcontainer", and "Repository Layout" text is unchanged.
- `CODESTYLE.md`, `.github/copilot-instructions.md`: the hub's changes
since the last sync (`c175d557`) are merged three-way. This repository's
"Utilities .NET Conventions" section, its `OPERATIONS.md` pointers, and
its own "Disproved Claims" ledger line all stay.
- `WORKFLOW.md`, `AUDIT.md`: replaced with the hub copies. Each old copy
matched the last-synced hub exactly and had nothing of its own.
- `.github/skills/`: the hub's generated tree, carried with
`scripts/carry.py apply`. This adds `update-host` and refreshes every
skill that matched a past hub revision. No skill directory was renamed
or removed, so the skill paths in `.github/copilot-instructions.md` stay
valid.

`CLAUDE.md` already matched the hub. This closes every `verbatim:` and
`tree:` finding from `audit run 2026-11-12T22:11:18Z | hub 009d3e5e`,
along with the `intent` advisories on `AGENTS.md`, `GOVERNANCE.md`,
`CODESTYLE.md`, `WORKFLOW.md`, `AUDIT.md`, and
`.github/copilot-instructions.md`. Auditing this branch (`audit run
2026-11-12T22:15:07Z | hub 009d3e5e | branch override
resync/hub-009d3e5e-instructions`) reports 0 findings except three
intent advisories, which the follow-up handles.

## Follow-Up

Once this merges, a separate intent-files pull request will bring
`global.json` in line with the hub's SDK-line selection, and move the VS
Code Lint tasks onto `docker_lint.py` through `hub_fetch_run.py`.

## Verification

- markdownlint-cli2 and editorconfig-checker pass across the tree. The
prose gate passes at both the pinned hub SHA and hub `main`, and the
repo gate reports nothing.
- Local strict review ran one pass over the full diff and found nothing.
The pass checked that each merged file's change matches the hub's own
change over the same range, and that `.github/skills/` is byte-identical
to the hub's tree.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
## Summary

This is step 6 of the hub resync to `ptr727/ProjectTemplate` at
`009d3e5e`: the intent files, brought in line by hand. It follows #597,
which carried the instruction set and the Skills tree.

- `global.json`: gains the hub snippet's `sdk` block, `10.0.100` with
`rollForward: latestFeature`, and keeps the repository's own
`test.runner`. A host with a newer SDK installed alongside .NET 10 now
builds on .NET 10, as CI does. `CODESTYLE.md`, carried in #597, already
describes the root `global.json` as selecting the SDK line. Before this
change, a host with SDK 11 installed built with SDK 11.
- `.vscode/tasks.json`: the Lint group now matches the hub snippet. The
EditorConfig, Workflows, Markdown, and Spelling tasks run through the
hub's `scripts/docker_lint.py`. `Lint: Prose` (whole repository) and
`Lint: EOL` are new. This matches `GOVERNANCE.md` "Editor and Tasks".
Two local adaptations:
- The snippet's pre-commit comment line is rewritten, since this
repository's hook runs only the .NET formatters.
- `Lint: All` runs EOL before Prose. A sequence stops at its first
failing task, and whole-repo Prose reports findings that predate this
change.
  - Both snippet issues are reported on hub #3536.
- `hub_fetch_run.py`: new at the root, byte-identical to the hub's
`catalog/snippets/hub_fetch_run.py`.
- `OPERATIONS.md`: describes the SDK pin, including that every host now
needs a .NET 10 SDK. It lists the helper and describes how each Lint
task runs. A two-sentence comment in `.vscode/tasks.json` is split, per
the comment rules.

This PR adds comment lines, all carried from the hub snippet or the
helper, so it carries the `comments` label.

This closes the `intent` advisory on `global.json` from `audit run
2026-11-12T22:11:18Z | hub 009d3e5e`. The advisories on `version.json`
and `.editorconfig-checker.json` are date-only, because their canonicals
changed before the last sync, and their content is the repository's own.

## Verification

- With SDK 11.0.100 and 10.0.404 both installed, `dotnet --version` now
reports 10.0.404. On that SDK, `dotnet build` passes with zero warnings
and `dotnet test` passes 212 of 212.
- Each Lint task's command was run by hand, and all six execute.
EditorConfig, Workflows, Markdown, Spelling, and EOL pass. Whole-repo
Prose reports findings only in files this change does not touch. The CI
gate is diff-scoped, so those findings do not affect it.
- The diff-scoped prose gate (with comments allowed) and markdownlint
pass.
- Local strict review ran three passes over the full diff. The first
found two overstatements in `OPERATIONS.md` and the Lint: All ordering.
The second found that the SDK-pin sentence hid the .NET 10 requirement.
All of these are fixed here, and the final pass found nothing.

## Findings Routed to the Hub

- `.vscode/tasks.json` `Lint: All` ordering, raised by a local pass. The
hub snippet runs `Lint: Prose` before `Lint: EOL` under a stopping
sequence, so a carrier with whole-repo prose findings never reaches EOL.
That is canonical content, so it is declined here and reported on
ptr727/ProjectTemplate#3536. This copy runs EOL first meanwhile.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings November 12, 2026 23:25
@coderabbitai

coderabbitai Bot commented Nov 12, 2026

Copy link
Copy Markdown

Important

  • Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@codecov

codecov Bot commented Nov 12, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 70.54%. Comparing base (95b415e) to head (e9ae676).
⚠️ Report is 196 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #601   +/-   ##
=======================================
  Coverage   70.54%   70.54%           
=======================================
  Files          13       13           
  Lines        1219     1219           
  Branches      111      111           
=======================================
  Hits          860      860           
  Misses        319      319           
  Partials       40       40           
Flag Coverage Δ
dotnet 70.54% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

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

A moderate active issue remains because termination during the fetched subprocess can leak the child and temporary tree while omitting the required signal status line, and the required mid-run coverage is missing.

1 open issue
What changed in this PR

Promotes the completed hub resync from develop to main, updating fleet guidance and Skills, aligning .NET and lint tooling with the hub, applying the loopback teardown fix, and bumping the test SDK.

Changes:

  • Resyncs governance, workflow contracts, operational guidance, and the generated Skills tree.
  • Adds .NET 10 SDK selection, hub-backed VS Code lint tasks, and hub_fetch_run.py.
  • Updates loopback teardown behavior and Microsoft.NET.Test.Sdk to 18.12.0.
  • Review follow-up covers the advertised LoopbackServer.cs promotion state, signal-safe cleanup in hub_fetch_run.py, and its opening docstring.
File Description
WORKFLOW.md Updates CI guarantees and operational workflow guidance.
UtilitiesTests/​LoopbackServer.cs Replaces teardown waits with bounded Task.WaitAny calls.
OPERATIONS.md Documents SDK selection and hub-backed lint tasks.
hub_fetch_run.py Adds the loader for fetching and running hub scripts through uv.
GOVERNANCE.md Resyncs governance rules for decisions, observed data, hub configuration, and reviews.
global.json Selects the .NET 10 SDK line and Microsoft.Testing.Platform.
Directory.Packages.props Updates Microsoft.NET.Test.Sdk to 18.12.0.
CODESTYLE.md Adds SDK configuration and interrupt-handling guidance.
AUDIT.md Updates audit branch selection, reporting, and resync procedures.
AGENTS.md Adds repository routing and host-update guidance.
.vscode/​tasks.json Routes lint tasks through the hub loader and adds prose and EOL tasks.
.github/​skills/​workflow-ci-contract/​references/​test-methodology.md Updates workflow audit scenarios and testing methodology.
.github/​skills/​workflow-ci-contract/​references/​d-guarantees.md Updates CI guarantee definitions.
.github/​skills/​workflow-ci-contract/​references/​architecture.md Updates operational workflow architecture guidance.
.github/​skills/​update-host/​SKILL.md Adds the host-wide update procedure.
.github/​skills/​standup-a-repo/​SKILL.md Updates repository standup sequencing and branch handling.
.github/​skills/​shell-codestyle/​SKILL.md Adds interrupt-handling guidance for shell scripts.
.github/​skills/​session-handoff/​SKILL.md Updates handoff, platform-lane, and cleanup procedures.
.github/​skills/​resync-a-repo/​SKILL.md Updates resync sequencing and grouping rules.
.github/​skills/​repo-worktree/​SKILL.md Documents ignored-file handling during worktree cleanup.
.github/​skills/​python-codestyle/​SKILL.md Adds Python interrupt-handling guidance.
.github/​skills/​pr-review-conduct/​SKILL.md Updates promotion coverage and observed-data review guidance.
.github/​skills/​merge-and-release/​SKILL.md Updates hub release and host-refresh procedures.
.github/​skills/​local-strict-review/​SKILL.md Updates review-round handling for observed data.
.github/​skills/​git-commit-conventions/​SKILL.md Adds target-repository identity and signing checks.
.github/​skills/​fleet-code-review/​SKILL.md Updates review requirements, reuse guidance, and coverage reporting.
.github/​skills/​drive-pr/​SKILL.md Updates finding disposition and escalation rules.
.github/​skills/​dotnet-codestyle/​SKILL.md Documents SDK-line and global.json conventions.
.github/​skills/​dotnet-codestyle/​references/​testing.md Connects MTP testing guidance with SDK configuration.
.github/​skills/​dotnet-codestyle/​references/​project-config.md Documents the SDK line alongside the target framework.
.github/​skills/​decision-triage/​SKILL.md Adds deferred-issue rechecking behavior.
.github/​skills/​copilot-instructions-keeper/​SKILL.md Updates intent-fidelity comparison guidance for Copilot instructions.
.github/​skills/​comment-and-doc-style/​SKILL.md Updates documentation and spelling guidance.
.github/​skills/​comment-and-doc-style/​references/​line-endings.md Expands line-ending guidance for tool-owned formats.
.github/​skills/​check-this-repo/​SKILL.md Adds the unified host-update path.
.github/​skills/​branching-and-release-model/​references/​branch-protection-and-promotion.md Updates ruleset application sequencing and branch selection.
.github/​skills/​backlog-burndown/​SKILL.md Adds net-flow reporting and deferred-work handling.
.github/​skills/​audit-a-repo/​SKILL.md Updates audit branch selection, reporting, and manual-finding procedures.
.github/​skills/​agent-conduct/​SKILL.md Clarifies decision-blocked handoff behavior.
.github/​copilot-instructions.md Resyncs Copilot review coverage guidance.

Review effort: Lite

Comment thread hub_fetch_run.py Resolved
@ptr727
ptr727 merged commit 84c2b10 into main Nov 12, 2026
38 checks passed
ptr727-codegen Bot pushed a commit to ptr727/LanguageTags that referenced this pull request Nov 13, 2026
Updated [ptr727.Utilities](https://github.com/ptr727/Utilities) from
4.1.112 to 4.1.119.

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

_Sourced from [ptr727.Utilities's
releases](https://github.com/ptr727/Utilities/releases)._

## 4.1.119

## What's Changed
* Skip the Carried Verbatim Trees in the Reviewer Configs by @​ptr727 in
ptr727/Utilities#583
* Bump the actions-deps group with 4 updates by @​dependabot[bot] in
ptr727/Utilities#585
* Bump the nuget-deps group with 1 update by @​dependabot[bot] in
ptr727/Utilities#587
* Bump the Hub Reusable Workflow Pin to 2.0.1401 by @​ptr727 in
ptr727/Utilities#593
* Rename codecov.yml to .codecov.yml by @​ptr727 in
ptr727/Utilities#592
* Bump the nuget-deps group with 4 updates by @​dependabot[bot] in
ptr727/Utilities#591
* Promote Develop: Hub Pin 2.0.1401 and the .codecov.yml Rename by
@​ptr727 in ptr727/Utilities#594
* Promote Develop: Reviewer Config Exclusions by @​ptr727 in
ptr727/Utilities#584
* Bump the nuget-deps group with 1 update by @​dependabot[bot] in
ptr727/Utilities#595
* Bound the Loopback Server Teardown Waits With Task.WaitAny by @​ptr727
in ptr727/Utilities#598
* Bound the Loopback Server Teardown Waits With Task.WaitAny on Main by
@​ptr727 in ptr727/Utilities#599
* Resync the Instruction Set and Skills Tree With the Hub by @​ptr727 in
ptr727/Utilities#597
* Resync the Intent Files With the Hub by @​ptr727 in
ptr727/Utilities#600
* Promote the Hub Resync to Main by @​ptr727 in
ptr727/Utilities#601


**Full Changelog**:
ptr727/Utilities@4.1.112...4.1.119

Commits viewable in [compare
view](ptr727/Utilities@4.1.112...4.1.119).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ptr727.Utilities&package-manager=nuget&previous-version=4.1.112&new-version=4.1.119)](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>
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