Skip to content

[feature/net11-scouting] Update dependencies from dotnet/arcade#19910

Open
dotnet-maestro[bot] wants to merge 78 commits into
feature/net11-scoutingfrom
darc-feature/net11-scouting-6d8cd33e-9149-43e8-911b-6699a210432f
Open

[feature/net11-scouting] Update dependencies from dotnet/arcade#19910
dotnet-maestro[bot] wants to merge 78 commits into
feature/net11-scoutingfrom
darc-feature/net11-scouting-6d8cd33e-9149-43e8-911b-6699a210432f

Conversation

@dotnet-maestro

@dotnet-maestro dotnet-maestro Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

This pull request updates the following dependencies

From https://github.com/dotnet/arcade

auduchinok and others added 30 commits May 20, 2026 14:57
* Fix #19596: overloaded member with unit parameter conformance check

SignatureConformance.fs: when matching overloaded members, add relaxed
fallback for unmatched pairs using type equivalence. This handles
member M(()) (argInfos=[[]]) vs sig member M: unit->unit (argInfos=[[unit_arg]])
where types are equivalent but TotalArgCount differs.
…text (#19772)

Evidence from 17 AI review audit:
- 53% had zero inline comments (wall-of-text body only)
- 5 reviews were LGTM verdicts buried in avg 1500 chars of prose
- Only 3/17 were inline-focused (ideal)

expert-reviewer.md:
- Wave 0: MUST dispatch independent subagents per dimension via task tool
- Wave 5: empty body for findings (just inline comments), 'LGTM' for approve
- New hard rule: body >10 chars (other than LGTM) is a bug
- Removed 'See inline comments' boilerplate — people have eyes

reviewing-compiler-prs/SKILL.md:
- Replaced aspirational 'Multi-Model Dispatch' with concrete 'Subagent Dispatch'
- Each dimension gets independent background agent with CHECK rules + filtered diffs
- Subagents produce structured {file, line, severity, dimension, issue, suggestion}
- Expert-reviewer consolidates, deduplicates, applies assessment gates

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Gate exception serialization codegen behind LanguageFeature.ExceptionFieldSerializationSupport (F# 11)

The GetObjectData override and field-restoring deserialization constructor
for exception types are now gated behind langversion 11. With langversion
<=10 (the current default), exceptions emit only the base-call ctor
(status quo ante PR #19342).

- Add LanguageFeature.ExceptionFieldSerializationSupport, mapped to F# 11.0
- Gate shouldRestoreFields and GetObjectData emission on the feature
- Update tests to use withLangVersion "11"
- Update all IL baselines (SerializableAttribute, Nullness) to reflect
  the default-langversion output (no field serde IL)

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

* Fix code formatting (fantomas)

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

* Update xlf files for featureExceptionFieldSerializationSupport

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

* Fix net472 IL baseline for ExceptionType nullness test

The net472 baseline was incorrectly updated to use [runtime] prefixed
NullableContextAttribute and NullableAttribute references. On net472,
these attributes are embedded in the assembly (not from runtime BCL),
so they must not have the [runtime] prefix. Also restore the embedded
attribute class definitions at the end of the file.

The serialization changes (removing field-restoring ctor and GetObjectData)
are correctly kept, as they match the default langversion behavior.

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

* Add release notes for exception field serialization langversion gate

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…9784)

- Exclude shared/ from workflow discovery (for repos with shared imports)
- Remove tooling-check-repo-rules.md reference (belongs to the security
  scan workflow, not the diagram generator)
- Fix rule numbering gap (was 1,2,3,4,5 → now 1,2,3,4)
- Replace fsharp-specific 'repo-assist' example with generic placeholder

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add failing tests for #19576 (TDD red)

Tests demonstrate that --nowarn:N does not suppress warnings emitted
during command-line option parsing (e.g. FS0075 for internal/test-only
options like --extraoptimizationloops, --typedtree).

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

* Honor --nowarn for warnings captured during command-line option parsing (#19576)

Wrap the logger used to replay delayed command-line diagnostics with
GetDiagnosticsLoggerFilteringByScopedNowarn so that --nowarn / --warnaserror /
warn-level switches set on the command line are honored for diagnostics
captured during option parsing (e.g. FS0075 from internal/test-only flags
such as --extraoptimizationloops or --typedtree).

The fix is applied both on the success path (fsc.fs main1, line ~586) and
on the error/exit paths via the IDiagnosticsLoggerProvider extension method,
making it universal across fsc.exe and FSharpChecker.Compile.

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

* Remove speculative third test for --test unknown-arg

The third test added in TDD red phase was speculative (warning numbers
didn't match) and outside the scope of sprint 2's DoD. Sprint 2 only
required the first two tests (FS0075 for --extraoptimizationloops and
--typedtree) to pass.

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

* Centralize warning emission in CompilerOptions.fs (#19576 follow-up)

Introduce a local 'warningCmdLine' helper that consults
tcConfigB.diagnosticsOptions via PhasedDiagnostic.AdjustSeverity before
forwarding to warning/errorR/informationalWarning. This gives option
parsing a second, local line of defense so future 'warning' callsites in
CompilerOptions.fs cannot silently bypass --nowarn/--warnaserror even if
the commit-time delayed-diagnostics wrapper is missing.

- Thread TcConfigBuilder through ParseCompilerOptions (all 6 callers).
- Thread TcConfigBuilder through CheckAndReportSourceFileDuplicates.
- Route the three cowboy 'warning' callsites in CompilerOptions.fs
  (reportDeprecatedOption, --test unknown-arg, duplicate source file)
  through warningCmdLine.
- Add a regression test for FS1063 (--test unknown sub-flag).

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

* Consolidate command-line nowarn tests into Theory and add FS3551 case

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

* Remove warningCmdLine; use commit-time filtering only; add missing tests

The emit-time warningCmdLine helper was order-dependent (only worked when
--nowarn preceded the triggering option) and introduced a regression with
--warnaserror+ (premature abort via errorR incrementing ErrorCount before
--nowarn could take effect).

Replace with commit-time filtering via GetDiagnosticsLoggerFilteringByScopedNowarn
at the two sites in fsc.fs where CapturingDiagnosticsLogger replays captured
diagnostics. This correctly applies all --nowarn/--warnaserror settings
accumulated during the full option parsing pass.

Revert ParseCompilerOptions and CheckAndReportSourceFileDuplicates signatures
to their original forms (no TcConfigBuilder parameter needed).

Add missing tests:
- Baseline tests verifying warnings ARE emitted without --nowarn
- --warnaserror+ with --nowarn interaction test

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

* Close test gaps: reverse-order, warnaserror baselines, specific warnaserror semantics

Add tests identified by multi-model adversarial review:
- Reverse-order test (--option before --nowarn) proves commit-time
  filtering works regardless of argument ordering
- --warnaserror+ baseline proving warning is promoted to error
- --warnaserror+ with --nowarn proving nowarn takes precedence (global)
- --warnaserror:75 with --nowarn:75 documenting that specific
  warnaserror wins over --nowarn (AdjustSeverity uses localNowarn
  for specific, warnOff for global)

13 tests total, 0 duplication of test source code.

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

* Add mixed-code selectivity test for --nowarn precision

Triggers both FS0075 and FS1063 simultaneously, suppresses only FS0075
via --nowarn:75, and asserts FS1063 still fires. Catches regressions
where filtering accidentally drops all command-line warnings.

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

* Fix case-sensitivity: track test file under fsc/ (lowercase) for Linux CI

The file was tracked by git as CompilerOptions/Fsc/warn/ (uppercase) while
the fsproj and all sibling files use lowercase fsc/. On case-sensitive Linux
this caused FS0225 'source file not found'.

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

* Address review: remove slop comments, add order-independence test

- Remove type annotation restating what inference provides
- Replace code-restating comments with WHY-comments
- Add test: --nowarn before --warnaserror+ still suppresses

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

* Address review: trim duplicate tests, remove slop comments

Remove mechanical test duplicates (15→7): drop Theory×3 testing same
warn number with different triggers, drop duplicate withNoWarn vs raw
--nowarn:N tests, drop redundant order-independence test.
Move release notes to 11.0.100.md (VNEXT).

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Update .NET SDK from 10.0.202 to 10.0.204.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix nullness narrowing for match inside seq/list/array comprehensions (#19644)

Extract null-narrowing helper EliminateNullnessFromInputType from
TcMatchClause and reuse it in TcSequenceExpression's SynExpr.Match
handler so the input type is narrowed across clauses inside
comprehensions, matching the behavior of plain match expressions.

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

* Add release notes for #19644

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

* Fix test failures on net472: remove System.Collections.Immutable dependency

The ImmutableHashSet<int>.Builder type is not available in the net472 test
compilation environment. Replace with string | null which tests the same
nullness narrowing logic without requiring external assembly references.

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

---------

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

* Narrow overload-error and symbol-use ranges to terminal identifier (#14284, #3920)
* Update dependencies from https://github.com/dotnet/arcade build 20260519.10
On relative base path root
Microsoft.DotNet.Arcade.Sdk From Version 10.0.0-beta.26269.2 -> To Version 10.0.0-beta.26269.10

* Update dependencies from https://github.com/dotnet/arcade build 20260525.1
On relative base path root
Microsoft.DotNet.Arcade.Sdk From Version 10.0.0-beta.26269.2 -> To Version 10.0.0-beta.26275.1

---------

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
…otnet-optimization build 20260522.1 (#19793)

On relative base path root
optimization.linux-arm64.MIBC.Runtime , optimization.linux-x64.MIBC.Runtime , optimization.windows_nt-arm64.MIBC.Runtime , optimization.windows_nt-x64.MIBC.Runtime , optimization.windows_nt-x86.MIBC.Runtime From Version 1.0.0-prerelease.26180.1 -> To Version 1.0.0-prerelease.26272.1

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
* Update dependencies from https://github.com/dotnet/roslyn build 20260520.10
On relative base path root
Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.8.0-1.26268.6 -> To Version 5.8.0-1.26270.10

* Update dependencies from https://github.com/dotnet/roslyn build 20260521.1
On relative base path root
Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.8.0-1.26268.6 -> To Version 5.8.0-1.26271.1

* Update dependencies from https://github.com/dotnet/roslyn build 20260522.14
On relative base path root
Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.8.0-1.26268.6 -> To Version 5.8.0-1.26272.14

* Update dependencies from https://github.com/dotnet/roslyn build 20260523.3
On relative base path root
Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.8.0-1.26268.6 -> To Version 5.8.0-1.26273.3

* Update dependencies from https://github.com/dotnet/roslyn build 20260524.3
On relative base path root
Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.8.0-1.26268.6 -> To Version 5.8.0-1.26274.3

* Update dependencies from https://github.com/dotnet/roslyn build 20260524.20
On relative base path root
Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.8.0-1.26268.6 -> To Version 5.8.0-1.26274.20

---------

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Tomas Grosup <Tomas.Grosup@gmail.com>
* Update dependencies from https://github.com/dotnet/msbuild build 20260520.4
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26269-11 -> To Version 18.8.0-preview-26270-04

* Update dependencies from https://github.com/dotnet/msbuild build 20260521.6
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26269-11 -> To Version 18.8.0-preview-26271-06

* Update dependencies from https://github.com/dotnet/msbuild build 20260522.6
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26269-11 -> To Version 18.8.0-preview-26272-06

* Update dependencies from https://github.com/dotnet/msbuild build 20260525.9
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26269-11 -> To Version 18.8.0-preview-26275-09

---------

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Tomas Grosup <Tomas.Grosup@gmail.com>
* Override System.Security.Cryptography.Xml to 10.0.8

Transitive dependency from Microsoft.Build.Tasks.Core pins
System.Security.Cryptography.Xml at 10.0.4. Add direct reference
in FSharp.Build to override to 10.0.8.

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

* Fix MSB3277: mark Cryptography.Xml as PrivateAssets to prevent net472 conflicts

The System.Security.Cryptography.Xml 10.0.8 override pulls transitive
dependencies (Microsoft.Bcl.Cryptography, System.Formats.Asn1) that
conflict with System.ValueTuple on net472 when flowing through
ProjectReference from FSharp.Build to fsc.fsproj.

PrivateAssets="all" prevents the package from flowing to consuming
projects while keeping it available to FSharp.Build at build-task
runtime.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…e workflow (#19783)

The workflow resolves merge conflicts by merging from main, which naturally
includes changes to protected files. The previous 'fallback-to-issue' policy
blocked these normal merge operations. The prompt still has "Never modify
.github/**" as a hard rule to prevent the agent from inventing changes.
…tep (#19727)

* Initial plan

* Fix Repo Assist workflow: recompile lock files to v0.72.1, reduce API limits to prevent timeouts

Root causes:
1. AWF binary v0.25.28 was removed from GitHub releases (404 error)
2. gh issue list --limit 500 through DIFC proxy causes 504 timeouts

Fixes:
- Recompile all workflow lock files from v0.68.3/v0.71.1 to v0.72.1
  (AWF containers updated from 0.25.20/0.25.28 to 0.25.41)
- Reduce issue fetch limit from 500 to 200
- Reduce PR fetch limit from 200 to 100
- Add fallback to empty JSON on fetch failures

Agent-Logs-Url: https://github.com/dotnet/fsharp/sessions/5524a246-1400-4899-9b62-aaf71ac6996f

Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>
Co-authored-by: Tomas Grosup <Tomas.Grosup@gmail.com>
Co-authored-by: Tomas Grosup <tomasgrosup@microsoft.com>
* Fix #19664: Extension static methods are resolved if similar intrisic methods exist
…ending upgrade (#19756)

* Initial plan

* Update agentic workflows via gh aw upgrade and fix safe-outputs config

- Updated actions/github-script from v8 to v9
- Updated github/gh-aw-actions/setup from v0.68.3 to v0.72.1
- Updated github/gh-aw/actions/setup from v0.67.2 to v0.72.1
- Updated actions-lock.json with pinned container images
- Recompiled all workflow lock files
- Updated agent file to v0.72.1 references
- Fixed aw-auto-update.md safe-outputs config:
  - Added github-app config for workflows permission
  - Added allow-workflows: true for create-pull-request and push-to-pull-request-branch
  - Changed protected-files from fallback-to-issue to allowed

Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>

* Recompile all workflows after merge conflict resolution (gh-aw v0.74.8)

Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>

* Recompile all workflows after merge conflict resolution

Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>

* Recompile workflows after merge conflict resolution

Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>
Co-authored-by: Tomas Grosup <tomasgrosup@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Tomas Grosup <Tomas.Grosup@gmail.com>
When the SupportValueOptionsAsOptionalParameters language feature is
enabled, do not force option<_> on caller-side ?name = expr arguments
during overload inference. Leave the type as a fresh inference variable
and let AdjustCalledArgTypeForOptionals (CalleeSide) reconcile against
option<_> or voption<_>.

Pre-LangVersion-10 behaviour is preserved.

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

* Initial plan

* Disable noop issue reporting for labelops-pr-maintenance workflow

Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>
Co-authored-by: Tomas Grosup <Tomas.Grosup@gmail.com>
* Add failing TDD tests for #19657: MeasureAnnotatedAbbreviation over reference type with | null

Add four tests in NullableReferenceTypesTests.fs covering:
- MeasureAnnotatedAbbreviation over string accepts | null in let bindings,
  parameters, returns, type abbreviations, and inline instantiations (fails today).
- MeasureAnnotatedAbbreviation over user-defined reference class accepts | null
  (fails today).
- MeasureAnnotatedAbbreviation over value types still rejects | null
  (non-regression, passes today).
- Nullness flow and not-null constraints work through the abbreviation
  (fails today; compilation does not reach the flow assertions).

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

* Fix #19657: strip measure equations in SolveTypeIsReferenceType

MeasureAnnotatedAbbreviation tycons over a reference type (e.g. UMX-style
`type string<[<Measure>] 'm> = string`) previously failed the reference-type
constraint check used by the `| null` syntax, producing FS0043. The surface
type is a TType_app over a MeasureableReprTycon, which isRefTy does not
recognise. Strip measure equations before testing reference semantics so the
underlying erased representation is consulted, consistent with TypeNullNever
and IsReferenceTyparTy. Value-type erasure still correctly fails FS0043.

Also corrects a Sprint 1 test expectation that listed a phantom diagnostic
which the compiler does not emit (the matched-on null case is fully covered).

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

* Release notes for #19657 MeasureAnnotatedAbbreviation + | null fix

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

* Address review findings: rename strippedTy, add edge-case tests

- Rename strippedTy -> underlyingTy for consistency with SolveTypeIsNonNullableValueType
- Condense comment to single line
- Add test: not-struct constraint satisfied by MeasureAnnotatedAbbreviation
- Add test: MAA over obj, interface, and chained abbreviation

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ot Coding Agent (#19840)

* Initial plan

* Fix aw-auto-update: add allow-workflows and github-app for workflow file push

The workflow was failing with "refusing to allow a GitHub App to create or
update workflow without workflows permission" because pushing .github/workflows/
files requires the workflows:write permission.

Fix by adding:
- allow-workflows: true to create-pull-request and push-to-pull-request-branch
- github-app config (client-id/private-key) required for workflows permission
- Fixed deprecated labels/title-prefix in push-to-pull-request-branch

Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>

* Replace push-to-workflow flow with create-agent-session delegation

The previous attempt added a GitHub App with new required secrets to bypass
GitHub's rule that GITHUB_TOKEN cannot push under .github/workflows/. The repo
has no GH App and no plan to provision one.

Make aw-auto-update detection-only: its safe outputs are restricted to noop
(the normal steady state) and create-agent-session. When an upgrade is
detected, the workflow delegates the actual upgrade + recompile + PR work to
a Copilot Coding Agent session authenticated via COPILOT_GITHUB_TOKEN, which
already exists in the repo and can write workflow files under its own
identity. No new secrets, no GitHub App, no allow-workflows.

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

* Remove explicit github-token from create-agent-session

Creating the agent task is an API-only call from the safe-outputs runner;
the runner does not touch workflow files (that happens later in the spawned
CCA session, under CCA's own identity). Default GITHUB_TOKEN with issues:write
should handle it. If gh agent-task create needs more later, we'll add it then.

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

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>
Co-authored-by: Tomas Grosup <Tomas.Grosup@gmail.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
…docs/ output (#19852)

The agentic-state-machine workflow has been failing since PR #19721 moved
the output to .github/docs/state-machine.md. Files under .github/ are
treated as protected by gh-aw (agent instruction files, security config).

The allowed-files config permits WHICH files can be modified but does not
override the built-in protected-files blocking. Adding protected-files:
allowed explicitly opts in, which is safe since allowed-files already
restricts writes to .github/docs/** only.

Fixes #19739

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix source-build: track System.Security.Cryptography.Xml via Version.Details

Move System.Security.Cryptography.Xml version management from hardcoded
eng/Versions.props to eng/Version.Details.xml + Version.Details.props,
following the same pattern as System.Diagnostics.DiagnosticSource and
other System.* runtime dependencies. This allows source-build to use
the live-built package instead of a prebuilt NuGet download.

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

* Restore PrivateAssets=all on System.Security.Cryptography.Xml

Removing PrivateAssets=all caused transitive dependencies
(Microsoft.Bcl.Cryptography, System.Formats.Asn1, etc.) to flow into
fsc.fsproj on net472, triggering MSB3277 version conflicts with
System.ValueTuple from .NET Framework reference assemblies.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
…ges (#19856)

- Add labelops-pr-security-scan (hourly PR safety classifier)
- Update aw-auto-update to reflect create-agent-session delegation
- Add all security scan labels to label dictionary
- Update source hashes

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dotnet-maestro Bot and others added 7 commits June 4, 2026 14:31
…operators when closing bracket is column-aligned (#19762)

* Initial plan

* Fix anonymous record type alias with array/generic type suffix error when closing bracket is aligned with opening bracket

Add BAR_RBRACE to isTypeSeqBlockElementContinuator in LexFilter.fs to prevent incorrect OBLOCKSEP insertion after closing |} in type alias contexts. This fixes the error 'Unexpected symbol [' in member definition' when writing:

    type T =
        {| Id: Guid
        |} []  // or |} seq, |} list, |} option

Add tests covering the fixed cases in AnonymousRecords.fs.

Agent-Logs-Url: https://github.com/dotnet/fsharp/sessions/efa54b78-f657-43e6-a50e-05db045cba9d

Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>

* Add release notes for anonymous record type alias parser fix

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

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>
Co-authored-by: Tomas Grosup <tomasgrosup@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Tomas Grosup <Tomas.Grosup@gmail.com>
Introduce checkBaseline/checkBaselineWith in the Compiler test module and
route the syntax-tree tests, surface-area verification, and the .err.bsl /
.il.bsl / .vsbsl component-test baselines through it, replacing each site's
own shouldUpdateBaselines check and ad-hoc file writes.

The helper reads the baseline file, compares via a pluggable comparer
(default exact equality; surface area and error baselines pass a set-based
comparer, IL passes an ILChecker-based one), and on mismatch writes the
produced content to an output file or updates the baseline when
TEST_UPDATE_BSL is set. The output file extension is replaced for .bsl
(foo.bsl -> foo.out) and appended otherwise (neg78.vsbsl -> neg78.vsbsl.out)
so the .bsl/.vsbsl baselines a single test can have no longer collide.

Removes the now-redundant updateBaseLineIfEnvironmentSaysSo,
createBaselineErrors, convenienceBaselineInstructions, and assertBaseline,
and drops the unused BaselineFile.FilePath field. This also fixes the IL
baseline update path, which previously copied the previous run's IL to the
baseline because the copy ran before the fresh actual was written.

The SyntaxTree-local .gitignore (*.actual) is removed since those tests now
write .out, covered by the global *.out rule.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…607.1

On relative base path root
Microsoft.DotNet.Arcade.Sdk From Version 11.0.0-beta.26279.5 -> To Version 11.0.0-beta.26307.1
@dotnet-maestro dotnet-maestro Bot requested a review from a team as a code owner June 8, 2026 05:04
@github-actions github-actions Bot added the AI-Tooling-Check-Bypassed Tooling check: non-fork PR, not diff-analyzed label Jun 8, 2026
T-Gro and others added 19 commits June 8, 2026 11:33
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Sequence points: rework `for` stepping

Step a for-each loop in source order: stop on the enumerable, then the element
binding (covering `for <pattern>`), then the body; "getting the next element"
is hidden.

Add a sequence-point baseline test helper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Release notes

* Update baselines

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
)

* Detect inconsistent [<CompiledName>] across extension overloads (#19604)
…19923)

* Move empty-string match optimization to Optimizer so quotations stay clean

The empty-string lowering added in #19189 produced `if x <> null then x.Length = 0
else false` inside `BuildSwitch`, which leaked through pattern-match compilation
into captured quotations (#19873). Move the rewrite to `OptimizeExprOp`, which
already skips `Expr.Quote` bodies. `match s with "" -> _` keeps the same IL and
quotations now see `op_Equality(s, "")`. As a side effect, `if s = "" then _`
gets the same null-safe length-check IL — improvement, not regression.

Also adds a generic `verifyOutputAgainstBaseline` helper in `Compiler.fs` and a
`.bsl`-driven quotation rendering test suite under `Conformance/Expressions/
ExpressionQuotations/QuotationRendering/` to catch future leaks of pattern-match
lowerings into quotation ASTs.

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

* Lock in IL trade-offs from rubber-duck review; tighten optimizer guard

Adversarial reviews flagged two IL-quality concerns. Verified both by
inspecting actual ildasm output, accepted both, and added IL tests
locking the current behavior in so future changes are conscious:

  1. --optimize- (debug) builds no longer get the null+Length fast path
     for `match s with "" -> _` because F#'s `(=)` is only inlined when
     LocalOptimizationsEnabled is true. The fallback `String.Equals(s,"")`
     call is still correct; JIT tiered compilation reaches the fast path.
  2. `match s with null | "" -> _` emits one redundant `brfalse` on the
     empty-string branch because the optimizer cannot see the enclosing
     null-filtered context that BuildSwitch's `isNullFiltered` flag tracked.
     JIT trivially eliminates the redundant branch.

Also tightens `IsILMethodRefSystemStringEquals` to require the call to
be static (rejects hypothetical instance/user-defined `System.String`
type with a 2-arg static `Equals`) and fixes a stale function-name
comment in PatternMatchCompilation.fs.

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

* Polish quotation rendering test suite

Driver: extract `printerProgram` helper using a triple-quoted F# string
(no more `\"\"` escape hell); group tests into Regression / NoLeakReference
/ SideEffect / PreExistingError submodules.

Baselines: drop the `Match` suffix (folder is already `QuotationRendering`),
delete redundant `SparseIntMatch` (same code path as Consecutive), shrink
all multi-case tests to the minimum that still demonstrates the point:
- ConsecutiveInts: 1..10 → 1..3 (was 41 lines, now 7)
- Chars, NonEmptyString: 3 → 2 cases
- Int64, Float, Decimal: 3 → 1 case

Result: 9 baselines totalling 37 lines, each fits on screen.

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

* Tighten test comments; collapse no-leak quotation tests to Theory

The empty-string regression tests and surrounding trade-off comments grew
beyond what they need to convey. This trims prose to the causal mechanism
only, flattens four banner-only sub-modules into one, collapses the five
no-leak reference tests into a parametrised Theory, and corrects a stale
docstring claim that Int64/Float/Decimal each take a distinct BuildSwitch
arm (Int64 and Float share the mkILAsmCeq path, so Float.bsl was redundant
with Int64.bsl and is removed). Release note shrinks from a paragraph to
the one user-observable change.

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

* Refactor quotation rendering tests to in-process literals after multi-architect review

Three rounds of adversarial multi-model (gpt-5.5, opus-4.7-xhigh, opus-4.8) architect
review converged on a cleaner design for the empty-string regression coverage:

- Quotation literals now live directly in test method bodies (`<@ … @>`) instead of
  inside a generated FSI script. They are desugared at test-project compile time by the
  proto fsc, which converts a runtime baseline diff into a compile-time gate: if #19873
  ever regresses, the test source itself fails to compile with FS0452.
- Removes the shared-FSI session, the no-op `RunTestCasesInSequence` cargo cult, the
  string-templated printer with its triple-quote escape guard, and the unused
  `verifyOutputAgainstBaseline` helper this PR briefly introduced.
- Baselines carry a `// <name>` provenance header so a `.bsl` opened in isolation
  identifies itself in PR diffs.
- Adds an orphan-guard `[<Fact>]` that fails when `*.bsl` on disk drifts from the
  test method set (skipped during `TEST_UPDATE_BSL=1` to avoid racing with writes).
- Adds a structural Expr walker as belt-and-suspenders alongside the baseline for the
  two known leaked-lowering shapes (`String.Length`, `String.Equals`).
- Adds a convergence assertion that the `match x with ""` and `if x = ""` quotations
  desugar to byte-identical Exprs, using shared module-level let bindings so the
  proof and the baselines cannot drift apart.
- Splits the FS0452 array-pattern diagnostic test into its own file since it uses a
  different harness (`FSharp |> typecheck |> shouldFail`, not a `.bsl` snapshot).

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

* Use tname_* constants instead of magic strings in IL method-ref matchers

`tname_String`, `tname_Bool`, `tname_Type` already exist in `src/Compiler/AbstractIL/il.fs`
as `[<Literal>]` constants alongside ~20 other type-name literals, but they were not
exposed via `il.fsi` so callers in `Optimize/Optimizer.fs` and `Symbols/Exprs.fs` had
been duplicating the magic strings (`"System.String"`, `"System.Boolean"`, `"System.Type"`).

Exposes the three names actually referenced outside `il.fs` via `il.fsi` and switches
the four affected `IL{TypeRef,MethodRef}.Name` comparisons to use them. No behavior
change. The fix applies to the empty-string-equals matcher this PR added plus the
pre-existing `String.Concat` / `String.GetHashCode` / `Type.GetTypeFromHandle` matchers.

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

* Trim bloated comments in QuotationRenderingTests.fs

5-line walker docstring, 3-line section-divider blocks, 6-line bullet list above
the no-leak reference Facts, and a 12-line "Design notes" header were rationalising
self-evident code or restating test names. Trimmed to the essentials: top-of-file
purpose + bootstrap caveat, one-line note next to the shared `let` bindings, and
the one genuinely-non-obvious comment (Int64 takes the mkILAsmCeq arm).

Net effect: file shrinks from 156 to 100 lines, signal density up, tests unchanged.

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

* Remove orphan-baseline guard Fact

It tested filesystem bookkeeping (does *.bsl on disk equal a hand-maintained
expectedBaselines set), not the compiler. The drift it catches — a deleted
test leaving its .bsl behind — is already visible in `git diff` and adds zero
signal anyone would actually use to find a regression.

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

* Cut surviving garbage after multi-agent adversarial scan

Three garbage hunters (production / tests / prose) found redundancies that
slipped through the earlier iterations:

Production:
- Merge two String.Equals(_, "")/("", _) optimizer arms into one or-pattern.
- Drop the redundant CallingConv.IsStatic guard in IsILMethodRefSystemStringEquals
  (ArgCount=2 + both args String + return Bool already pin the static overload).
- Inline single-use let bindings in MakeOptimizedStringEqualsEmptyCall.
- Shrink 4-line docstring to 2 lines; shrink match-arm comment to one line.
- Shrink il.fsi block comment and PatternMatchCompilation.fs trade-off comment.

Tests:
- Delete QuotationUnsupportedConstructsTests.fs (FS0452 array-pattern coverage
  already exists in Regressions/E_DecomposeArray01.fs — pure duplication).
- Delete IfEqualEmpty.bsl + its test + the convergence Fact + the shared `let`
  bindings + assertNoEmptyStringLowering walker; all duplicated EmptyString.bsl
  coverage either as identical AST or as belt-and-suspenders restating the
  baseline diff.
- Strip the `// <name>` provenance header from the printer and from all 7
  remaining baselines — the test method name already identifies each baseline.
- Trim trade-off comment tails in TypeTestsInPatternMatching.fs (drop the
  JIT-folds-the-duplicate / tiered-compilation trivia).

Release notes: drop the implementation-detail bullet about `if s = ""` getting
the same null-safe IL — implied by moving the rewrite to the optimizer.

Net: -115/+30 across 16 files. 14 tests still pass; build clean.

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

* Refactor String IL-method matchers via active pattern + InlineIfLambda

Extracts a `(|StringTy|_|)` partial active pattern over `ILType` and a small
`isILMethodRefOnSystemString` helper that bakes in `tname_String` as the
declaring type and takes the per-arg-shape check as an `[<InlineIfLambda>]`.

Each `IsILMethodRefSystem*` now reads as the literal shape it matches:
`[StringTy; StringTy]` for Equals(string, string); the three overload arities
of String.Concat as alternative list patterns; `[ILType.Array (shape, StringTy)]`
for Concat(string[]). No `ArgCount` book-keeping or `List.forall` walks left.

Behaviour unchanged: build clean, 14 quotation + IL tests still green.

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

* Address PR review + fix CI: drop misplaced comment, run quotations via FSI

- PatternMatchCompilation.fs: remove the misplaced `// Empty-string is rewritten…`
  comment on the (now-pristine) string arm (review feedback from @abonie).

- QuotationRenderingTests.fs: replace literal `<@…@>` quotations with source-string
  evaluation through a shared FSI session. The bootstrap fsc that builds the test
  project still has the pre-fix desugar and rejects literal `match s with ""`
  quotations with FS0452 — the literals only become valid AFTER this PR is in the
  bootstrap. FSI uses the just-built FCS (with the fix), so source-as-string
  evaluation is bootstrap-immune. The .bsl baselines are unchanged.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Adam Boniecki <20281641+abonie@users.noreply.github.com>
)

* Fix TLR under --realsig+ and closure constraint stripping

Two codegen bugs fixed:

1. TLR (Top-Level Routing) was disabled under --realsig+ via a blanket
   short-circuit in InnerLambdasToTopLevelFuncs, causing inner recursive
   functions to be emitted as closure classes instead of static methods.
   This produced ~23× perf regression for struct mutual recursion (#17607).

   Fix: Remove the realsig band-aid. Instead, add a moduleCloc field to
   IlxGenEnv that always points to the enclosing non-generic module class.
   TLR-lifted vals (IsCompiledAsTopLevel && !IsMemberOrModuleBinding) are
   routed to moduleCloc, preventing them from inheriting class typars of
   a generic enclosing type.

2. Constrained inline generics, when inlined into closures, attached their
   constraints to the closure class's type params. The Specialize<T> override
   (from FSharpTypeFunc) must be unconstrained to match its base signature.
   When constraints leaked, the JIT threw TypeLoadException (#14492).

   Fix: In EraseClosures CASE 1, strip constraints from both the Specialize
   override method-typars (CASE 1b) and the later closure class-typars
   (CASE 1a) at the CASE 1 head. Rewrite stripILGenericParamConstraints
   via mkILSimpleTypar to be future-proof (clears all constraint fields
   including CustomAttrsStored which carries IsUnmanagedAttribute).

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

* Fix verifyILContains silent failure, add checkILPresent/checkILNotPresent HOF

- verifyILContains now throws on mismatch instead of silently returning
  CompilationResult.Failure (which callers were ignoring with |> ignore).
- Unify checkILPresent/checkILNotPresent via shared checkILFragments HOF.
- Expose verifyILPresent in Compiler.fs (symmetric with verifyILNotPresent).
- Fix TypeTests.fs assertions exposed by the silent-failure fix.

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

* Add tests and regenerate IL baselines for TLR/constraint fixes

New test files:
- Regression_TLR_MutualInnerRec_StructuralAssertions.fs: 20 tests covering
  TLR scenarios (generic class, nested module, three-way rec, quotation,
  value rec) and constraint stripping (IL shape, ILVerify, >5 params CASE 2a,
  combined TLR+constraint). All run under both realsig on/off.
- Regression_Specialize_ConstraintVerification.fs: 14 tests exercising each
  ILGenericParameterDef field stripped by mkILSimpleTypar (struct, not struct,
  unmanaged, new(), interface, comparison, combined) via ILVerify + run.
- 4 new IL-baseline source files (mutual rec, captured env, generic, Point2D)
  with Off/On .il.bsl pairs confirming realsig parity.

Regenerated baselines:
- TestFunction06, TestFunction23: closures replaced by static methods
- Match01: clo@4 closure removed (TLR fires under realsig+)
- Unmanaged: virtual DirectInvoke → static func@3

Note: Match01 and TestFunction23 .net472.bsl baselines need TEST_UPDATE_BSL=1
regeneration on Windows CI (macOS cannot target net472).

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

* Release notes for TLR realsig fix (#17607) and constraint stripping fix (#14492)

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

* Add PR link to release notes and fix code formatting

- Add PR #19882 link to both release note entries
- Apply fantomas formatting to il.fs and IlxGen.fs

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

* Fix FS2014 duplicate-name when TLR routes namespace-level vals to moduleCloc

When moduleCloc has empty Enclosing (namespace-level / types-only file), the
previous routing fell through TypeRefForCompLoc to <PrivateImplementationDetails$AsmName>,
a single per-assembly type. Multiple files each with an inner-rec function having
the same compiler-generated name (e.g. capture@N in two FSharpEmbedResource-derived
modules of FSharp.Build) all dumped into that shared bucket and collided in the IL
method table, producing FS2014 `duplicate entry 'capture@83' in method table` at
write-time during the bootstrap compilation of FSharp.Build and
FSharp.DependencyManager.Nuget under --realsig+.

Fix: when moduleCloc.Enclosing is empty, route through CompLocForInitClass instead.
TypeNameForInitClass embeds TopImplQualifiedName (per-file) so the lifted val lands
in <StartupCode$AsmName>.$FileName, matching the pre-realsig codegen layout and
giving the per-file isolation that prevents collisions. The Container<'T>-style fix
(moduleCloc with non-empty Enclosing) is preserved unchanged.

Verified by rebuilding the compiler with -bootstrap -buildnorealsig:$false; both
FSharp.Build.dll and FSharp.DependencyManager.Nuget.dll compile clean. Adds a
regression test in Regression_TLR_MutualInnerRec_StructuralAssertions that fails
on the previous version and passes after this fix.

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

* Update stale IL baselines surfaced by CI after the moduleCloc routing fix

Regenerated from build 1449384 actual IL output:
- TestFunction23.fs.RealInternalSignatureOn.OptimizeOn.il.net472.bsl
- Match01.fs.RealInternalSignatureOn.il.net472.bsl
- Regression_TLR_MutualInnerRec_Point2D.fs.RealInternalSignatureOff.il.bsl
- Regression_TLR_MutualInnerRec_Point2D.fs.RealInternalSignatureOn.il.bsl

The first two were known stale per the PR description (net472 needs
TEST_UPDATE_BSL on Windows CI). The Point2D baselines drift was caused by
the duplicate-name fix changing the routing of TLR-lifted vals at
namespace-level to the per-file init class.

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

* Re-extract Point2D baselines from Linux CI log (use Entire actual: marker)

Previous extraction grabbed only the first chunk of paginated Actual:
output; the correct full IL appears after the "Entire actual:" sentinel.
Linux's Point2D baselines are now consistent for both realsig settings.

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

* Normalize ldc.r8 N vs ldc.r8 N. in ILChecker for shared .bsl files

Windows ildasm 5.x prints whole-number float literals with a trailing dot
(`ldc.r8 10.`), Linux ildasm strips the dot entirely (`ldc.r8 10`).
Without normalization, any .bsl file with floats inevitably fails on one
platform — observed on the new Point2D regression test.

The new `unifyFloatLiterals` rule rewrites bare `ldc.r8 -?N` to the
dotted form for both expected and actual, keeping comparisons platform-
agnostic without forcing baselines to be regenerated per OS.

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

* Address adversarial review feedback (opus 4.8, opus 4.7 xhigh, gpt 5.5)

Comment trimming (all 3 reviewers flagged):
- IlxGen.AllocValReprWithinExpr: 9-line block down to 2 lines
- IlxGen.moduleCloc field doc + AddEnclosingToEnv: one-liners
- EraseClosures CASE 1 unconstrainedGenParams: 3-line narrative down to 1
- Regression_TLR_MutualInnerRec_StructuralAssertions: closureWithConstraint header,
  namespace-collision test doc, and inline assertion comments
- Regression_Specialize_ConstraintVerification module doc: 16 lines down to 3
- ILChecker.unifyFloatLiterals: 3-line comment + redundant (?!\.) regex lookahead

Correctness / clarity:
- AbstractIL.stripILGenericParamConstraints: keep explicit field-by-field clear with
  CustomAttrsStored reset, accurate doc — the previous mkILSimpleTypar rewrite silently
  dropped Variance/MetadataIndex semantics that the comment did not mention
- InnerLambdasToTopLevelFuncs: collapse two adjacent Some(f, arity) branches into one
  predicate (atTopLevel || arity <> 0 || not (isNil tps))
- Combined TLR+constraint test: actually assert constraint stripping
  (Specialize<class/valuetype patterns) — previously only checked the search@ symbol
- TypeTests.fs `M(()) and M() produce same IL method signature`: test name was a
  silent-failure relic from before verifyILContains threw — assertion clearly shows
  Unit and int are distinct signatures. Renamed and pointed at #19615.
- Drop the now-redundant `Issue 14492: >5 params closure chain produces D-suffix
  and unconstrained Specialize` Specialize/T duplication — the dedicated test next
  to it already covers that path; this one keeps the D-suffix-only assertion.

No production-code behaviour change beyond field-by-field stripping in
stripILGenericParamConstraints; CI baselines unaffected.

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

* Address production-grade reuse review (opus 4.8, opus 4.7 xhigh, gpt 5.5)

Tests:
- Extract shared `verifyPEAndRun` helper (GPT-5.5: duplicated PEFile + run tail
  across compileVerifyAndRun and both inline >5-params and Combined test bodies)
- Combined test: drop `object Specialize<` positive assertion — the inlined
  constraint produces no Specialize<> for this closure shape, so the previous
  assertion broke Linux CI (build 1451155). Negative `Specialize<class`/
  `Specialize<valuetype` checks are kept and remain meaningful (vacuously true
  when no Specialize is emitted, real if one ever appears with leaked constraint).

Compiler:
- IlxGen.GetEmptyIlxGenEnv + GenerateCode: bind `ccuLoc`/`fragLoc` once
  instead of computing CompLocForCcu/CompLocForFragment twice per record literal
  (GPT-5.5: cloc/moduleCloc pairing easy to desynchronize).

Deferred (after triage):
- verifyILContains vs verifyILPresent rename — all 3 reviewers flagged the name
  overlap, but the rename touches ~100 callers across the test suite, out of
  scope for this PR. Both helpers now throw on mismatch (silent failure already
  fixed); the matching-semantics difference will be documented separately.
- withQName near-duplicate with line 1918-1921 cloc reset — sites differ in
  Range semantics (the latter intentionally omits Range update for FSI
  fragments), so a shared helper would add overhead more than it removes.

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

* Address expert-review feedback (post-merge from origin/main)

Refute and dismiss B1 ("debug-stepping clobber"): PR #19894 (d0e593f)
landed on origin/main on 2026-06-08 13:11, three days AFTER my last merge
on 2026-06-05 11:35. None of my commits (7757717, e2ed10f, f933f83)
touch the relevant IlxGen.fs lines. Merged origin/main now brings the
fix in — verified `if equals m range0` is present at IlxGen.fs:3178 and
:3743 in the working tree.

Apply M3: Release notes now cite #19075 in the constraint-stripping entry
(test `SRTP member constraint with IDisposable` explicitly targets that
issue's CLR segfault).

Soften M2: Drop the unverified "≈23x" specific number from release notes;
the perf magnitude is documented in #17607 itself with the original repro.

Apply L2: `unmanaged + equality` test now asserts no
`Specialize<valuetype (...modreq...)` or `T<valuetype (...modreq...)`
leakage — exercises the IsUnmanagedAttribute / modreq stripping path that
motivated the CustomAttrsStored clear in stripILGenericParamConstraints.

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

* Collapse byte-identical Off/On TLR baselines into shared single .bsl

The 4 new TLR regression tests (Regression_TLR_MutualInnerRec, _CapturedEnv,
_Generic, _Point2D) emit byte-identical IL under --realsig+ and --realsig-,
which was previously expressed as two duplicated .bsl files per test
(_.RealInternalSignatureOff.il.bsl + _.RealInternalSignatureOn.il.bsl).

Replace each pair with a single shared file: <test>.fs.il.bsl. The bsl
lookup chain in FileInlineDataAttribute.fs:94-106 already falls through
to the bare .il.bsl after exhausting realsig-suffixed candidates, so
both Realsig=Off and Realsig=On invocations now compare against the same
file. Identity becomes a structural property of the test layout instead
of a coincidence between two separately-maintained baselines.

Reduces baseline byte count by ~50% for these tests and makes any future
realsig divergence an immediate failure (the same .bsl can't match two
different IL outputs).

Note: these tests use no source-level `private` keyword, so they do not
exercise realsig's tightened-visibility promise. A genuine `--realsig+`
regression test exercising `private` data accessed by a TLR-lifted
helper would legitimately produce divergent Off/On baselines and would
need to revert to the split form. Left as a follow-up.

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

* Add Regression_TLR_RealsigPrivate.fs — 4 granular AV-class regressions

Adds runtime smoke tests for the hypothetical access-check failure scenarios
identified in the bsl-essence review of this PR. Each tests a distinct shape
where this PR's new TLR routing (lifting inner-rec helpers to module/init-class
statics under --realsig+) could in principle trip a MethodAccessException /
FieldAccessException / TypeAccessException by landing the lifted helper in an
IL container that no longer has access to the source-`private` data it touches.

Tests, each [<Theory; InlineData(true); InlineData(false)>] for realsig parity,
each in its own [<Fact>]-style `let` so failures localize:

  1. Module-private value accessed from TLR-lifted inner-rec
  2. Type-private static accessed from TLR-lifted inner-rec inside same type
  3. Private DU structural compare via TLR-lifted continuation
  4. Generic + private nested type captured by TLR-lifted inner-rec

Verified locally with the modified compiler: all 8 invocations (4 tests x
realsig on/off) compile and run successfully — no access exceptions surface.
The tests are therefore positive regressions: they protect future routing /
visibility changes from regressing into the hypothetical AV path.

Note: the existing 4 `Regression_TLR_MutualInnerRec*.fs` tests use no
source-`private` keyword and so do not exercise realsig's tightened
visibility promise. This new file fills that gap with runtime evidence.

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

* Bump ILVerify job timeout to 120 min (was AzDo default 60 min)

ILVerify on this PR (build 1454404) hit the 60-min default timeout and was
cancelled mid-Release-build. Investigation against recent main builds:

  Build 1449768 (pre-#19894)  : ILVerify 21.1 min, succeeded
  Build 1451079 (pre-#19894)  : ILVerify 21.2 min, succeeded
  Build 1453983 (#19894 `d0e593f67`) : ILVerify 36.5 min, succeeded
  Build 1454404 (this PR HEAD): ILVerify 60.4 min, CANCELLED

Two compounding causes:

1. Upstream PR #19894 ("Debug: rework or expressions stepping") added
   ~14 min to ILVerify on main alone — verified across multiple post-#19894
   main builds. ILVerify is the only leg using -bootstrap, so it pays the
   compiler-build cost x3 (bootstrap, proto, final).

2. This PR makes TLR actually fire under --realsig+ for the first time
   (the whole point of #17607's fix). The compiler self-build now lifts
   thousands of inner-rec functions across FCS itself that were previously
   left as closures. That extra TLR work, multiplied by the x3 bootstrap
   cycle, pushes ILVerify past 60 min.

Neither is "flaky". The work is real and load-bearing. Bumping the per-job
timeout to 120 min restores headroom for the bootstrap+proto+final cycle
across both Debug and Release configurations.

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

* Refuse TLR when body references private member under --realsig+

Wave 2 adversarial exploit (opus 4.8): a TLR-lifted helper emitted at module
scope can lose access to source-private members of an enclosing type, throwing
MethodAccessException at runtime under --realsig+. F# RecdFields always compile
to IL assembly or better, so field access is safe; only val/method references
need to be checked.

Add SelectTLRVals predicate that walks the binding body and refuses TLR when a
non-public val is referenced and realsig+ is on. Adds two regression tests
covering the confirmed exploit shape (generic class + type-private static).

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

* Tighten TLR private-ref guard to type-scoped members only

Wave 3 (opus 4.7 perf agent) found the previous guard refused TLR for any
inner-rec referencing a private val, which silently defeated the PR's perf
wins for the very common F# idiom of module-private helpers (state machines,
parsers, scanners, predicates). 8 realistic shapes showed 1.33×-3.23×
regression vs the pre-fix PR.

The MethodAccessException risk only exists when the referenced private val
lives in a CLASS/STRUCT — IL 'private' is type-scoped. Module-private vals
compile to methods on the same module IL class as the lifted helper, so
they remain accessible.

Refine SelectTLRVals predicate to refuse only when vref's TryDeclaringEntity
is a class/struct (not IsModuleOrNamespace). Wave 2 exploit still fixed
(verified locally: W2A20 exit 0; canonical 17607-style pipeline TLR fires,
25ms vs 71ms over-aggressive refusal).

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
…otnet-optimization build 20260609.1 (#19927)

On relative base path root
optimization.linux-arm64.MIBC.Runtime , optimization.linux-x64.MIBC.Runtime , optimization.windows_nt-arm64.MIBC.Runtime , optimization.windows_nt-x64.MIBC.Runtime , optimization.windows_nt-x86.MIBC.Runtime From Version 1.0.0-prerelease.26276.2 -> To Version 1.0.0-prerelease.26309.1

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
…e filter (#19909)

Reflects changes in labelops-pr-security-scan.md:
- Adds date filter (cutoff-based skip) as explicit choice state
- Clarifies that repo rules + memory are read together at setup
- Notes paginated PR listing (newest first)
- Updates state.json check description

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…604.4 (#19903)

On relative base path root
Microsoft.DotNet.Arcade.Sdk From Version 10.0.0-beta.26301.2 -> To Version 10.0.0-beta.26304.4

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
* Update dependencies from https://github.com/dotnet/roslyn build 20260603.12
On relative base path root
Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.9.0-1.26302.3 -> To Version 5.9.0-1.26303.12

* Update dependencies from https://github.com/dotnet/roslyn build 20260604.2
On relative base path root
Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.9.0-1.26302.3 -> To Version 5.9.0-1.26304.2

* Update dependencies from https://github.com/dotnet/roslyn build 20260605.6
On relative base path root
Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.9.0-1.26302.3 -> To Version 5.9.0-1.26305.6

* Update dependencies from https://github.com/dotnet/roslyn build 20260606.2
On relative base path root
Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.9.0-1.26302.3 -> To Version 5.9.0-1.26306.2

* Update dependencies from https://github.com/dotnet/roslyn build 20260608.7
On relative base path root
Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.9.0-1.26302.3 -> To Version 5.9.0-1.26308.7

* Update dependencies from https://github.com/dotnet/roslyn build 20260609.3
On relative base path root
Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.9.0-1.26302.3 -> To Version 5.9.0-1.26309.3

* Update dependencies from https://github.com/dotnet/roslyn build 20260611.6
On relative base path root
Microsoft.CodeAnalysis , Microsoft.CodeAnalysis.Compilers , Microsoft.CodeAnalysis.CSharp , Microsoft.CodeAnalysis.EditorFeatures , Microsoft.CodeAnalysis.EditorFeatures.Text , Microsoft.CodeAnalysis.ExternalAccess.FSharp , Microsoft.CodeAnalysis.Features , Microsoft.VisualStudio.LanguageServices From Version 5.9.0-1.26302.3 -> To Version 5.9.0-1.26311.6

---------

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
* Update dependencies from https://github.com/dotnet/msbuild build 20260526.3
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26275-09 -> To Version 18.8.0-preview-26276-03

* Update dependencies from https://github.com/dotnet/msbuild build 20260527.9
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26275-09 -> To Version 18.9.0-preview-26277-09

* Update dependencies from https://github.com/dotnet/msbuild build 20260529.4
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26275-09 -> To Version 18.9.0-preview-26279-04

* Update dependencies from https://github.com/dotnet/msbuild build 20260601.10
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26275-09 -> To Version 18.9.0-preview-26301-10

* Update dependencies from https://github.com/dotnet/msbuild build 20260602.8
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26275-09 -> To Version 18.9.0-preview-26302-08

* Fix UseDotNet@2 temp extraction conflict in regression tests

The UseDotNet@2 task fails when installing multiple .NET SDKs sequentially
because it doesn't always clean up temp extraction directories between runs.
This causes 'The file dotnet.exe already exists' errors when the 3rd SDK
(10.0.100) tries to extract to the same temp directory used by a prior install.

Add a cleanup step between the 9.0.x and 10.0.100 SDK installs that removes
any leftover extraction directories containing dotnet.exe along with SDK
structure markers (sdk/, host/, shared/).

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

* Update dependencies from https://github.com/dotnet/msbuild build 20260603.5
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26275-09 -> To Version 18.9.0-preview-26303-05

* Update dependencies from https://github.com/dotnet/msbuild build 20260604.5
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26275-09 -> To Version 18.9.0-preview-26304-05

* Update dependencies from https://github.com/dotnet/msbuild build 20260605.7
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26275-09 -> To Version 18.9.0-preview-26305-07

* Update dependencies from https://github.com/dotnet/msbuild build 20260608.25
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26275-09 -> To Version 18.9.0-preview-26308-25

* Update dependencies from https://github.com/dotnet/msbuild build 20260609.5
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26275-09 -> To Version 18.9.0-preview-26309-05

* Update dependencies from https://github.com/dotnet/msbuild build 20260610.5
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26275-09 -> To Version 18.9.0-preview-26310-05

* Update dependencies from https://github.com/dotnet/msbuild build 20260612.1
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.8.0-preview-26275-09 -> To Version 18.9.0-preview-26312-01

---------

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The Arcade SDK's Tests.props only auto-detects test projects with
.Tests/.UnitTests/.IntegrationTests/.PerformanceTests suffixes.
FSharp.Compiler.ComponentTests (ending with .ComponentTests) was not
detected, causing IsShipping=true and triggering SymStore's Pdb2Pdb
conversion which crashes on this large test assembly.

Explicitly set IsTestProject=true for all test projects in the
tests\Directory.Build.props to ensure .ComponentTests projects are
treated as non-shipping and excluded from PDB conversion.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…outing-6d8cd33e-9149-43e8-911b-6699a210432f

# Conflicts:
#	.github/docs/state-machine.md
#	eng/Version.Details.props
#	eng/Version.Details.xml
#	eng/common/core-templates/steps/publish-logs.yml
#	eng/common/core-templates/steps/source-index-stage1-publish.yml
#	global.json
#	src/Compiler/Checking/Expressions/CheckExpressions.fs
#	src/Compiler/FSComp.txt
#	src/Compiler/Facilities/LanguageFeatures.fs
#	src/Compiler/Facilities/LanguageFeatures.fsi
#	src/Compiler/xlf/FSComp.txt.cs.xlf
#	src/Compiler/xlf/FSComp.txt.de.xlf
#	src/Compiler/xlf/FSComp.txt.es.xlf
#	src/Compiler/xlf/FSComp.txt.fr.xlf
#	src/Compiler/xlf/FSComp.txt.it.xlf
#	src/Compiler/xlf/FSComp.txt.ja.xlf
#	src/Compiler/xlf/FSComp.txt.ko.xlf
#	src/Compiler/xlf/FSComp.txt.pl.xlf
#	src/Compiler/xlf/FSComp.txt.pt-BR.xlf
#	src/Compiler/xlf/FSComp.txt.ru.xlf
#	src/Compiler/xlf/FSComp.txt.tr.xlf
#	src/Compiler/xlf/FSComp.txt.zh-Hans.xlf
#	src/Compiler/xlf/FSComp.txt.zh-Hant.xlf
#	tests/FSharp.Compiler.ComponentTests/Signatures/TypeTests.fs
#	tests/FSharp.Compiler.Service.Tests/SyntaxTreeTests.fs
#	tests/FSharp.Test.Utilities/Compiler.fs
#	tests/FSharp.Test.Utilities/SurfaceArea.fs
MSBuild 18.9 (Microsoft.Build.Tasks.Core) transitively pulls in
System.Resources.Extensions 10.0.8 and System.Text.Json 10.0.8 which
reference System.ValueTuple 4.0.5.0. This conflicts with the .NET
Framework 4.7.2 facade (4.0.2.0), causing MSB3277 which becomes a
build error under CI's /warnaserror flag.

Since fsc/fsi are Exe projects with binding redirects, the version
mismatch is resolved safely at runtime. Suppress MSB3277 via NoWarn
(which flows into MSBuildWarningsAsMessages in the SDK targets).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The skill-validator requires a 'name' field in agent frontmatter.
This was lost during the merge from main.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…outing-6d8cd33e-9149-43e8-911b-6699a210432f
…610.1

On relative base path root
Microsoft.DotNet.Arcade.Sdk From Version 11.0.0-beta.26279.5 -> To Version 11.0.0-beta.26310.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI-Tooling-Check-Bypassed Tooling check: non-fork PR, not diff-analyzed

Projects

Status: New

Development

Successfully merging this pull request may close these issues.

7 participants