Fold F# .fsproj ordering into msbuild-antipatterns AP-05 - #577
Conversation
… files Teaches agents F# compilation order rules, signature file placement, and common FS0039/FS0010/FS0034 fixes. Includes eval with three scenarios (add module, fix broken order, add signature file) and test fixtures. Validated +64.6% improvement on gpt-4.1 (significant, CI [+17.2%, +63.0%]). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… files Teaches agents F# compilation order rules, signature file placement, and common FS0039/FS0010/FS0034 fixes. Includes eval with three scenarios (add module, fix broken order, add signature file) and test fixtures. Validated +64.6% improvement on gpt-4.1 (significant, CI [+17.2%, +63.0%]). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ro/skills into feature/fsharp-projects-mgmt
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Scraps the standalone fsharp-project-structure skill and instead adds a
short F# exception to AP-05 (Manual File Listing in SDK-Style Projects):
F# compilation is order-dependent, so .fsproj files must list Compile
items in dependency order (utilities first, entry point last), and .fsi
signature files must appear immediately before their companion .fs.
The three F# eval scenarios (add module, fix broken order, add signature
file) are ported into tests/dotnet-msbuild/msbuild-antipatterns/eval.yaml
with fixtures isolated under a fsharp/ subfolder (with empty
Directory.Build.{props,targets} to prevent the existing C#-antipattern
fixture files from leaking into the F# builds).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Updates the msbuild-antipatterns guidance and eval coverage to account for F#’s order-dependent compilation, avoiding incorrect advice to remove explicit <Compile Include> lists in .fsproj files.
Changes:
- Add an AP-05 exception documenting F#
.fsprojcompile-order requirements (including.fsiplacement). - Add F# fixture projects (
OrderService, intentionally-brokenBrokenOrder) to support eval scenarios about ordering and signature files. - Extend the
dotnet-msbuild/msbuild-antipatternseval suite with F#-specific scenarios.
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/dotnet-msbuild/msbuild-antipatterns/fsharp/OrderService/Domain.fs | Adds F# domain types for a “correctly ordered” fixture project. |
| tests/dotnet-msbuild/msbuild-antipatterns/fsharp/OrderService/Services.fs | Adds service functions that depend on Domain. |
| tests/dotnet-msbuild/msbuild-antipatterns/fsharp/OrderService/Program.fs | Adds a simple executable entrypoint consuming Services/Domain. |
| tests/dotnet-msbuild/msbuild-antipatterns/fsharp/OrderService/OrderService.fsproj | Adds an explicitly ordered <Compile Include> list for the F# fixture. |
| tests/dotnet-msbuild/msbuild-antipatterns/fsharp/BrokenOrder/Domain.fs | Adds domain types for the intentionally broken-order fixture. |
| tests/dotnet-msbuild/msbuild-antipatterns/fsharp/BrokenOrder/Services.fs | Adds code that will fail if compiled before Domain. |
| tests/dotnet-msbuild/msbuild-antipatterns/fsharp/BrokenOrder/Program.fs | Adds executable entrypoint for the broken-order fixture. |
| tests/dotnet-msbuild/msbuild-antipatterns/fsharp/BrokenOrder/BrokenOrder.fsproj | Deliberately incorrect compile order to trigger ordering diagnostics in eval. |
| tests/dotnet-msbuild/msbuild-antipatterns/fsharp/Directory.Build.props | Prevents parent C#-specific props from leaking into F# fixtures. |
| tests/dotnet-msbuild/msbuild-antipatterns/fsharp/Directory.Build.targets | Prevents parent C#-specific targets from leaking into F# fixtures. |
| tests/dotnet-msbuild/msbuild-antipatterns/eval.yaml | Adds new eval scenarios covering F# file ordering and .fsi placement. |
| plugins/dotnet-msbuild/skills/msbuild-antipatterns/SKILL.md | Documents the new AP-05 exception for F# .fsproj ordering/signatures. |
| agentic-workflows/dotnet-msbuild/shared/compiled/style-and-modernization.lock.md | Mirrors the AP-05 exception into the compiled workflow import (but currently appears truncated). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
@T-Gro I just removed the agentic workflow for msbuild. You can reset your changes to that file. |
…ects-mgmt # Conflicts: # agentic-workflows/dotnet-msbuild/shared/compiled/style-and-modernization.lock.md
|
ok, done |
|
/evaluate |
Skill Validation Results
[1] Model: claude-opus-4.6 | Judge: claude-opus-4.6 🔍 Full Results - additional metrics and failure investigation steps ▶ Sessions Visualisation -- interactive replay of all evaluation sessions |
Replaces #248.
AP-05 tells users to drop explicit
<Compile Include>lists — correct for C#, but silently wrong for any order-dependent compiler (F#, and therefore any mixed-language solution). A two-sentence exception in AP-05 (plus ported eval scenarios) covers it inline.