Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
3af7bc9
Avoid leaking a MeterListener per Cache in DEBUG builds (#19995)
NatElkins Jul 8, 2026
46be812
Add ResetCompilerGeneratedNameState to compiler-generated name genera…
NatElkins Jul 9, 2026
e8e8029
Localized file check-in by OneLocBuild Task: Build definition ID 499:…
dotnet-bot Jul 21, 2026
be37bef
Tests/source context: support multiple carets (#20077)
auduchinok Jul 22, 2026
bfbbc39
Move VS language-service logic tests to FSharp.Compiler.Service.Tests…
T-Gro Jul 23, 2026
efe2a83
Add Roslyn-format EnC CustomDebugInformation codec and portable PDB m…
NatElkins Jul 24, 2026
7f18589
Add stable synthesized-name replay infrastructure for hot reload (#20…
NatElkins Jul 24, 2026
f834fc3
Fix #19457: lift CE constructs from plain let RHS in computation expr…
T-Gro Jul 24, 2026
9b35d3c
Fix attribute resolution in recursive module/namespace scopes (#19744)
T-Gro Jul 24, 2026
c4e161b
Correct StructLayout size emission for data-less struct unions (#19759)
Copilot Jul 24, 2026
b8bde73
Report FS3888 for generic attribute type abbreviations instead of FS0…
T-Gro Jul 26, 2026
fba9ecb
Support NotNullIfNotNullAttribute (#19977)
kerams Jul 28, 2026
fa91707
Compiled ToStrings under -reflectionfree for DUs and Records (#19976)
charlesroddie Jul 30, 2026
66b57ac
Run ilverify via the tool manifest instead of a hard-coded cache path…
abonie Jul 30, 2026
4a4957c
Record spreads (#18927)
brianrourkeboll Aug 1, 2026
ff07413
Implement interpolated strings via String.Concat (#19971)
charlesroddie Aug 1, 2026
522aef7
Secure release-note checks for fork pull requests (#20081)
NatElkins Aug 3, 2026
b756176
Update test project to net11 (#20104)
abonie Aug 3, 2026
02f5448
LexFilter: drop non-strict mode (#20106)
auduchinok Aug 4, 2026
8c7ac93
Implement direct delegates (#19993)
kerams Aug 4, 2026
6cb1aac
Fix check_release_notes 403 by restoring pull-requests: write and mak…
T-Gro Aug 4, 2026
f333f36
Adopt ordered multi-caret markers in FCS tests (no behaviour change) …
T-Gro Aug 4, 2026
130f20c
Record spreads: off-by-default shadowing warnings (#20206)
brianrourkeboll Aug 5, 2026
7a67a97
Remove always-on PrintfBinaryFormat language feature flag (#20202)
T-Gro Aug 5, 2026
d4852d5
Stabilize preview language features into F# 11.0 (#20199)
T-Gro Aug 6, 2026
a81ec2e
Implement `<inheritdoc>` XML documentation support for F# (#19188)
Copilot Aug 6, 2026
0972f1d
Add support for `<include>` XML documentation tag (#19186)
Copilot Aug 6, 2026
e854870
Fix false prompt-injection alarm on PR Tooling Safety Check bypass la…
T-Gro Aug 6, 2026
27b2eb7
feat(Async): RunSynchronouslyImmediate (#19804)
bartelink Aug 6, 2026
04273a1
Add ECMA-335 EnC metadata delta writer (#20019)
NatElkins Aug 6, 2026
195263e
Remove always-on StructActivePattern language feature flag (#20208)
T-Gro Aug 6, 2026
870ac12
Remove always-on OpenTypeDeclaration language feature flag (#20209)
T-Gro Aug 6, 2026
0820d96
Allow closing '>' of multiline nested type arguments to align with th…
edgarfgp Aug 7, 2026
1d374c6
Record constructors (FS-1073) (#19974)
charlesroddie Aug 7, 2026
974fffe
docs: update state-machine.md for changed workflow SHAs (#20234)
github-actions[bot] Aug 10, 2026
911bb03
Localized file check-in by OneLocBuild Task: Build definition ID 499:…
dotnet-bot Aug 10, 2026
4b6dc12
Enable MSBuild node reuse defaults in eng/Build.ps1 and eng/build.sh …
T-Gro Aug 10, 2026
5f52351
Fix spurious FS0410 for tuple patternInput bindings (#4161) (#19947)
KirtiRamchandani Aug 11, 2026
0f654a8
Ignore lines starting with `#:` (RFC-1337) (#20212)
Martin521 Aug 11, 2026
43d2a4c
feat(Async+Task+ValueTask): consistent helper modules (#19844)
bartelink Aug 11, 2026
efb0fc6
Add hot reload baseline reading and recorded EnC state (#20026)
NatElkins Aug 11, 2026
67fc341
Optimizer: propagate NoDynamicInvocation (#20242)
auduchinok Aug 11, 2026
0704c3c
Support OverloadResolutionPriority and a most-concrete overload tiebr…
T-Gro Aug 11, 2026
f7cdef3
Remove always-on UseBindingValueDiscard language feature flag (#20162…
T-Gro Aug 11, 2026
3bd56f2
Remove always-on WildCardInForLoop language feature flag (#20221)
T-Gro Aug 11, 2026
a0018d9
Remove always-on AndBang language feature flag (#20223)
T-Gro Aug 11, 2026
e4e344b
Remove always-on ImplicitYield language feature flag (#20230)
T-Gro Aug 11, 2026
1050d64
Import: Don't walk non-F# assemblies when labelling trait constraint …
auduchinok Aug 12, 2026
cefd6c4
chore(Async.RunSynchronouslyImmediate): Stragglers re #19804 (#20245)
bartelink Aug 12, 2026
86c34be
Parser: recover on unfinished abstract members (#20070)
auduchinok Aug 12, 2026
88a8623
Remove always-on SingleUnderscorePattern language feature flag (#20222)
T-Gro Aug 12, 2026
e04c524
Add symbol and type highlighting to F# diagnostics (#20097)
auduchinok Aug 12, 2026
d903010
Avoid per-instance lock object in InterruptibleLazy and DelayInitArra…
auduchinok Aug 12, 2026
324c5d0
Regression matrix: build unmodified repos against local FSharp.Core (…
T-Gro Aug 12, 2026
687e283
IL: add ILPreNamespace, make ILPreTypeDef creation lazy (#20092)
auduchinok Aug 12, 2026
d9c654c
feat(Async): Add exception-unwrapping Await (#19785)
bartelink Aug 13, 2026
8b31d77
IL: fix leaking binary view (#20250)
auduchinok Aug 13, 2026
9425d97
IL: use empty tables for members when possible (#20249)
auduchinok Aug 13, 2026
dc8127b
Add regression test: #14454, IAsyncDisposable use in task CE in FSI (…
github-actions[bot] Aug 13, 2026
a344af6
Teach compiler driver to ignore unknown warning codes (#20246)
Copilot Aug 13, 2026
254adcd
Remove always-on RelaxWhitespace language feature flag (#20226)
T-Gro Aug 13, 2026
02d539a
Add nullness regression test for recursive inline SRTP memoization (#…
T-Gro Aug 17, 2026
5c78723
Ship FSharp.Core with a net10.0 target framework (selective port of #…
T-Gro Oct 7, 2026
82ece42
Flow release/10.0.4xx into rel/d18.11-ltsc for VS insertion (adapted …
T-Gro Oct 7, 2026
9148ae5
Fix ILVerify baseline filenames for net10.0 FSharp.Core asset (follow…
T-Gro Oct 7, 2026
c4a0f1a
Merge branch 'release/10.0.4xx' into backport/dev18.11-to-10.0.4xx
T-Gro Oct 9, 2026
d833001
Use the 43.13 FCS family for the 18.11 backport
T-Gro Oct 13, 2026
37ac748
Merge release/10.0.4xx into backport/dev18.11-to-10.0.4xx
T-Gro Oct 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/agents/compiler-perf-investigator.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ These are **general investigation instructions** for this agent, a template for
### 1. Preparation
- **Setup:** Clone/generate repo/snippet/etc.
- **Clear old config:** Remove `global.json` unless needed.
- **Prepare local compiler:** Use `PrepareRepoForRegressionTesting.fsx` and absolute env paths.
- **Prepare local compiler:** Build via `dotnet fsi <fsharp-repo>/eng/scripts/BuildWithLocalFSharp.fsx --build-script '<cmd>'` (sets the local-compiler + FSharp.Core shim env).

### 2. Experiment Matrix

Expand Down
4 changes: 2 additions & 2 deletions .github/docs/state-machine.md
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ gh-aw safe-output defaults (suppressed below): `target: "*"`, `noop.report-as-is
| `labelops-pr-maintenance` | `add-comment` | 5 | hide-older-comments: true |
| `labelops-pr-maintenance` | `add-labels` | 3 | allowed: AI-needs-CI-fix-input |
| `labelops-pr-maintenance` | `dispatch-workflow` | 3 | workflows: labelops-flake-fix |
| `labelops-pr-security-scan` | `add-labels` | 50 | allowed: 10 labels (⚠️ Affects-* family + Scanned-Clean + Bypassed) |
| `labelops-pr-security-scan` | `add-labels` | 50 | allowed: 11 labels (⚠️ Affects-* family + Suspicious-Prompting + Scope-Review-Needed + Scanned-Clean + Bypassed) |
| `labelops-pr-security-scan` | `add-comment` | 25 | hide-older-comments: true |
| `msbuild-quality-review` | `create-issue` | 1 | title `[msbuild-quality] `, labels: automation+Area-ProjectsAndBuild |
| `msbuild-quality-review` | `create-pull-request` | 1 | draft: true, title `[msbuild-quality] `, protected-files: fallback-to-issue |
Expand Down Expand Up @@ -372,4 +372,4 @@ gh-aw safe-output defaults (suppressed below): `target: "*"`, `noop.report-as-is

---

> generator-version: f107bba1a1cd61dc · source-shas: 06e56c52,149f0bbe,1af951a0,36b2b857,3775b51d,49b2989b,5e54b0e6,5e9a1344,7dca5b8f,9285c8a0,98d92f32,a5296399,acf12bdf,b5c04ea8,ec5fa486,f107bba1,
> generator-version: f107bba1a1cd61dc · source-shas: 06e56c52,149f0bbe,1af951a0,36b2b857,3775b51d,420b9d6e,49b2989b,5e9a1344,7dca5b8f,9285c8a0,98d92f32,acf12bdf,b5c04ea8,d3e496db,ec5fa486,f107bba1,
284 changes: 180 additions & 104 deletions .github/workflows/check_release_notes.yml

Large diffs are not rendered by default.

33 changes: 18 additions & 15 deletions .github/workflows/labelops-pr-security-scan.lock.yml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 21 additions & 1 deletion .github/workflows/labelops-pr-security-scan.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ description: |
PR Tooling Safety Check — labels open PRs with what phases they affect.
Runs hourly. Text-only — reads diffs via GitHub API, never checks out
or builds PR code. Labels tell maintainers what a PR touches before
they build, test, or load it into Copilot.
they build, test, or load it into Copilot. Non-fork PRs (head repo is
dotnet/fsharp) are bypass-labeled `AI-Tooling-Check-Bypassed` without a
diff scan; only fork PRs get phase (`⚠️ Affects-*`) labels.

on:
schedule: every 1h
Expand Down Expand Up @@ -34,6 +36,24 @@ tools:
file-glob: ["*.json"]

safe-outputs:
# The threat-detection job is a separate LLM that only sees this workflow's
# description + the agent's output — not the process steps below. Without this
# hint it misreads the expected `AI-Tooling-Check-Bypassed` label on a non-fork
# PR as the agent being manipulated into skipping its scan, and flags a false
# "prompt injection". This prompt is appended to the detector's instructions.
threat-detection:
prompt: |
This workflow's EXPECTED behavior: non-fork PRs (headRepository owner/name ==
dotnet/fsharp) are labeled `AI-Tooling-Check-Bypassed` with NO phase labels
and NO comment. That is the designed non-fork bypass path defined in
`.github/tooling-check-repo-rules.md`, not a deviation. Only fork PRs receive
phase (`⚠️ Affects-*`) labels. Applying `AI-Tooling-Check-Bypassed` to a
NON-FORK PR, or `AI-Tooling-Check-Scanned-Clean` to a fork PR, is normal,
in-scope behavior and MUST NOT on its own be treated as prompt injection or a
skipped safety check. This reassurance is scoped to that path only: a FORK PR
that received `AI-Tooling-Check-Bypassed` instead of a diff scan IS a deviation
worth flagging, since bypassing the scan on a fork is exactly the outcome an
injected PR would try to induce.
# Runs hourly — a transient engine/infra crash must not open a tracking issue.
# Real signal is the labels this workflow applies to PRs.
report-failure-as-issue: false
Expand Down
2 changes: 2 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@
Cannot live in eng/TargetFrameworks.props because it's imported before Arcade. -->
<PropertyGroup Condition="'$(DotNetBuildSourceOnly)' == 'true'">
<FSharpNetCoreProductTargetFramework>$(NetCurrent)</FSharpNetCoreProductTargetFramework>
<!-- Source-build targets only $(NetCurrent); collapse the shipped-net pin to it (its ref pack is always present). -->
<FSharpCoreShippedNetTargetFramework>$(NetCurrent)</FSharpCoreShippedNetTargetFramework>
</PropertyGroup>

<!-- It's important we set TFM before this, since FSharpTests.Directory.Build.props uses it.
Expand Down
9 changes: 8 additions & 1 deletion Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@
<Import Project="FSharpTests.Directory.Build.targets" Condition = " '$(FSharpTestCompilerVersion)' != '' "/>
<Import Project="CoordinateXliff.targets" Condition = " '$(FSharpBuildAssemblyFile)' != '' and '$(XliffTasksAssembly)' != '' "/>

<!-- net10.0 ships in the FSharp.Core package only; in-repo .NET consumers keep binding netstandard2.1. -->
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' and '$(Configuration)' != 'Proto'">
<ProjectReference Update="@(ProjectReference)">
<SetTargetFramework Condition="'%(ProjectReference.Filename)' == 'FSharp.Core' and '%(ProjectReference.SetTargetFramework)' == ''">TargetFramework=netstandard2.1</SetTargetFramework>
</ProjectReference>
</ItemGroup>

<!-- Disable R2R when building source-only and not targeting the current SDK bundled TFM. -->
<PropertyGroup>
<PublishReadyToRun Condition="'$(DotNetBuildSourceOnly)' == 'true' and
Expand Down Expand Up @@ -40,4 +47,4 @@
RemoveProperties="TargetFramework"
StopOnFirstFailure="True" />
</Target>
</Project>
</Project>
23 changes: 17 additions & 6 deletions FSharpBuild.Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -97,12 +97,23 @@
</ItemGroup>
</Target>

<!-- SDK targets override -->
<PropertyGroup Condition="'$(Configuration)' != 'Proto' AND '$(DisableCompilerRedirection)'!='true' AND Exists('$(ProtoOutputPath)')">
<FSharpBuildAssemblyFileOverride>$(ProtoOutputPath)\fsc\FSharp.Build.dll</FSharpBuildAssemblyFileOverride>
</PropertyGroup>
<UsingTask TaskName="FSharpEmbedResourceText" AssemblyFile="$(FSharpBuildAssemblyFileOverride)" Override="true" Condition="'$(Configuration)' != 'Proto' AND '$(DisableCompilerRedirection)'!='true' AND Exists('$(ProtoOutputPath)')" />
<UsingTask TaskName="FSharpEmbedResXSource" AssemblyFile="$(FSharpBuildAssemblyFileOverride)" Override="true" Condition="'$(Configuration)' != 'Proto' AND '$(DisableCompilerRedirection)'!='true' AND Exists('$(ProtoOutputPath)')" />
<!-- SDK targets override: the SDK's released FSharp.Build cannot generate the classified resource
accessors FSComp.txt is compiled with, so the tasks come from the Bootstrap, or from this repo's own
build for projects opting in - FSharp.Build itself cannot, its FSBuild.txt would need its own output
before it is built. No Exists check, so a missing assembly is an error rather than a silent fallback
to the SDK's. TaskHostFactory keeps the node from locking what it loads. -->
<PropertyGroup>
<FSharpBuildTasksAssembly Condition="'$(Configuration)' != 'Proto' AND '$(DisableCompilerRedirection)' != 'true' AND Exists('$(ProtoOutputPath)')">$(ProtoOutputPath)\fsc\FSharp.Build.dll</FSharpBuildTasksAssembly>
<FSharpBuildTasksAssembly Condition="'$(FSharpBuildTasksAssembly)' == '' AND '$(UseBootstrappedFSharpBuildTasks)' == 'true'">$(ArtifactsDir)bin\FSharp.Build\$(Configuration)\netstandard2.0\FSharp.Build.dll</FSharpBuildTasksAssembly>
</PropertyGroup>
<UsingTask TaskName="FSharpEmbedResourceText" AssemblyFile="$(FSharpBuildTasksAssembly)" Override="true" TaskFactory="TaskHostFactory" Condition="'$(FSharpBuildTasksAssembly)' != ''" />
<UsingTask TaskName="FSharpEmbedResXSource" AssemblyFile="$(FSharpBuildTasksAssembly)" Override="true" TaskFactory="TaskHostFactory" Condition="'$(FSharpBuildTasksAssembly)' != ''" />

<Target Name="BuildFSharpBuildForResourceGeneration"
BeforeTargets="GenerateFSharpTextResources"
Condition="'$(UseBootstrappedFSharpBuildTasks)' == 'true' AND '$(FSharpBuildTasksAssembly)' != '' AND !Exists('$(FSharpBuildTasksAssembly)')">
<MSBuild Projects="$(RepoRoot)src\FSharp.Build\FSharp.Build.fsproj" RemoveProperties="TargetFramework" />
</Target>


<Target Name="BeforeResGen"
Expand Down
Loading
Loading