Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,41 +1,42 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>disable</ImplicitUsings>
<RootNamespace>PerformanceMonitor.Darling.Analysis</RootNamespace>
<AssemblyName>PerformanceMonitor.Darling.Analysis</AssemblyName>
<Company>Darling Data, LLC</Company>
<Copyright>Copyright © 2026 Darling Data, LLC</Copyright>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<AnalysisLevel>latest-recommended</AnalysisLevel>
<NoWarn>CA1849;CA2007;CA1508;CA1822;CA1805;CA1510;CA1816;CA1861;CA1845;CA2201;CA1848;CA1852;CA1305;CA1860;CA1707;CA1507;CA1806;CA2254</NoWarn>
<WarningsAsErrors>CS4014</WarningsAsErrors>
</PropertyGroup>

<ItemGroup>
<!-- The plan fetcher connects to the MONITORED SQL Server (same client the Service uses);
Npgsql and Logging.Abstractions flow transitively from the Storage/Notifications references. -->
<PackageReference Include="Microsoft.Data.SqlClient" Version="7.0.2" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\PerformanceMonitor.Analysis\PerformanceMonitor.Analysis.csproj" />
<ProjectReference Include="..\..\PerformanceMonitor.Collectors\PerformanceMonitor.Collectors.csproj" />
<!-- AlertContextSerializer: the finding store persists/reads remediation_action_json through the
SAME serializer both apps use, so a Darling finding's action round-trips byte-identically. -->
<ProjectReference Include="..\..\PerformanceMonitor.Notifications\PerformanceMonitor.Notifications.csproj" />
<!-- PlanAdvisoryAggregator: the fact collector's WS4 plan advisories parse collected plan XML
through the same shared ShowPlanParser/PlanAnalyzer both apps use. -->
<ProjectReference Include="..\..\PerformanceMonitor.PlanAnalysis\PerformanceMonitor.PlanAnalysis.csproj" />
<ProjectReference Include="..\PerformanceMonitor.Darling.Storage\PerformanceMonitor.Darling.Storage.csproj" />
</ItemGroup>

<ItemGroup>
<InternalsVisibleTo Include="Darling.Tests" />
<!-- The viewer's blocking read path reuses PgBlockingPairRowQuery (the shared source-agnostic
chain reconstructor's Postgres row shaper) directly, mirroring how Lite/Dashboard consume
the shared blocking internals. -->
<InternalsVisibleTo Include="PerformanceMonitor.Darling.Viewer" />
</ItemGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>disable</ImplicitUsings>
<RootNamespace>PerformanceMonitor.Darling.Analysis</RootNamespace>
<AssemblyName>PerformanceMonitor.Darling.Analysis</AssemblyName>
<Company>Darling Data, LLC</Company>
<Copyright>Copyright © 2026 Darling Data, LLC</Copyright>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<AnalysisLevel>latest-recommended</AnalysisLevel>
<NoWarn>CA1849;CA2007;CA1508;CA1822;CA1805;CA1510;CA1816;CA1861;CA1845;CA2201;CA1848;CA1852;CA1305;CA1860;CA1707;CA1507;CA1806;CA2254</NoWarn>
<WarningsAsErrors>CS4014</WarningsAsErrors>
</PropertyGroup>

<ItemGroup>
<!-- The plan fetcher connects to the MONITORED SQL Server (same client the Service uses);
Npgsql and Logging.Abstractions flow transitively from the Storage/Notifications references. -->
<PackageReference Include="Microsoft.Data.SqlClient" Version="7.0.2" />
<PackageReference Include="ModelContextProtocol" Version="2.0.0" />

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Dependabot added a new direct PackageReference here — no version was pinned in this csproj before. Darling.Analysis has no using ModelContextProtocol anywhere in its .cs sources (grep confirms zero hits outside this csproj), so this reference is spurious.

Two consequences:

  1. It forces ModelContextProtocol 2.0.0 into every downstream that references Darling.Analysis (transitively, that includes Darling.Service, Darling.Viewer, Darling.Tests).
  2. It creates version skew with PerformanceMonitor.Common (still at 1.4.1, csproj line 20) which this project also references. NuGet will resolve to the higher version but will emit an NU1608/downgrade warning, and Common's comment "Brings ModelContextProtocol.Core… transitively" is now inconsistent.

If the intent is to bump the SDK across the solution, do it as one coordinated change to Common + Lite + deprecated Dashboard + the Darling projects. If not, just delete this line — the project doesn't consume the SDK directly.


Generated by Claude Code

</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\PerformanceMonitor.Analysis\PerformanceMonitor.Analysis.csproj" />
<ProjectReference Include="..\..\PerformanceMonitor.Collectors\PerformanceMonitor.Collectors.csproj" />
<!-- AlertContextSerializer: the finding store persists/reads remediation_action_json through the
SAME serializer both apps use, so a Darling finding's action round-trips byte-identically. -->
<ProjectReference Include="..\..\PerformanceMonitor.Notifications\PerformanceMonitor.Notifications.csproj" />
<!-- PlanAdvisoryAggregator: the fact collector's WS4 plan advisories parse collected plan XML
through the same shared ShowPlanParser/PlanAnalyzer both apps use. -->
<ProjectReference Include="..\..\PerformanceMonitor.PlanAnalysis\PerformanceMonitor.PlanAnalysis.csproj" />
<ProjectReference Include="..\PerformanceMonitor.Darling.Storage\PerformanceMonitor.Darling.Storage.csproj" />
</ItemGroup>

<ItemGroup>
<InternalsVisibleTo Include="Darling.Tests" />
<!-- The viewer's blocking read path reuses PgBlockingPairRowQuery (the shared source-agnostic
chain reconstructor's Postgres row shaper) directly, mirroring how Lite/Dashboard consume
the shared blocking internals. -->
<InternalsVisibleTo Include="PerformanceMonitor.Darling.Viewer" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
@@ -1,65 +1,65 @@
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>disable</ImplicitUsings>
<RootNamespace>PerformanceMonitor.Darling.Service</RootNamespace>
<AssemblyName>PerformanceMonitor.Darling.Service</AssemblyName>
<Version>3.3.0</Version>
<AssemblyVersion>3.3.0.0</AssemblyVersion>
<FileVersion>3.3.0.0</FileVersion>
<Company>Darling Data, LLC</Company>
<Copyright>Copyright © 2026 Darling Data, LLC</Copyright>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<AnalysisLevel>latest-recommended</AnalysisLevel>
<NoWarn>CA1849;CA2007;CA1508;CA1822;CA1805;CA1510;CA1816;CA1861;CA1845;CA2201;CA1848;CA1852;CA1305;CA1860;CA1707;CA1507;CA1806;CA2254</NoWarn>
<WarningsAsErrors>CS4014</WarningsAsErrors>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="10.0.10" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="7.0.2" />
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="10.0.10" />
<!-- Restrictive ACLs on the DPAPI credential files (the data dir parent, the *.dpapi files, the
transient init pwfile). Windows-only, like every credential surface here; the extension
methods (GetAccessControl/SetAccessControl/SetOwner) live in this package on a net10.0
(non-windows) TFM, which the service keeps so bring-your-own mode still runs cross-platform. -->
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
<!-- AN4: the analysis MCP tools over Streamable HTTP — Lite's exact MCP stack/version.
The AspNetCore package brings the Microsoft.AspNetCore.App framework reference
(Kestrel/WebApplication) transitively, same as it does for Lite. -->
<PackageReference Include="ModelContextProtocol" Version="1.4.1" />
<PackageReference Include="ModelContextProtocol.AspNetCore" Version="1.4.1" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\PerformanceMonitor.Alerting\PerformanceMonitor.Alerting.csproj" />
<ProjectReference Include="..\..\PerformanceMonitor.Common\PerformanceMonitor.Common.csproj" />
<ProjectReference Include="..\..\PerformanceMonitor.Collectors\PerformanceMonitor.Collectors.csproj" />
<!-- AN3: the analysis pipeline (DarlingAnalysisService/PgPlanFetcher). Dependency points
service → analysis only; the analysis library never references the service. -->
<ProjectReference Include="..\PerformanceMonitor.Darling.Analysis\PerformanceMonitor.Darling.Analysis.csproj" />
<!-- The plan-analysis MCP tools run the SHARED ShowPlanParser/PlanAnalyzer and serialize via
McpPlanAnalysisFormatter (the same projection both apps' McpPlanTools call). Referenced
directly (it also flows transitively through Darling.Analysis) since it is a direct dependency. -->
<ProjectReference Include="..\..\PerformanceMonitor.PlanAnalysis\PerformanceMonitor.PlanAnalysis.csproj" />
<ProjectReference Include="..\PerformanceMonitor.Darling.Storage\PerformanceMonitor.Darling.Storage.csproj" />
</ItemGroup>

<ItemGroup>
<None Include="darling.sample.json" CopyToOutputDirectory="PreserveNewest" />
<!-- #1562: the web dashboard's static assets (Builder 3 owns wwwroot/). Copied beside the binary so the
web host's content/web root (pinned to AppContext.BaseDirectory) finds them under a Windows service. -->
<Content Include="wwwroot\**\*" CopyToOutputDirectory="PreserveNewest" />
<!-- The install/uninstall scripts ride the publish output to the ZIP ROOT (beside the exe), so both
the release and nightly zips carry them with no packaging-workflow changes - same delivery
mechanism as darling.sample.json. -->
<None Include="..\tools\install-darling.ps1" Link="install-darling.ps1" CopyToOutputDirectory="PreserveNewest" />
<None Include="..\tools\uninstall-darling.ps1" Link="uninstall-darling.ps1" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

<ItemGroup>
<InternalsVisibleTo Include="Darling.Tests" />
</ItemGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>disable</ImplicitUsings>
<RootNamespace>PerformanceMonitor.Darling.Service</RootNamespace>
<AssemblyName>PerformanceMonitor.Darling.Service</AssemblyName>
<Version>3.3.0</Version>
<AssemblyVersion>3.3.0.0</AssemblyVersion>
<FileVersion>3.3.0.0</FileVersion>
<Company>Darling Data, LLC</Company>
<Copyright>Copyright © 2026 Darling Data, LLC</Copyright>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<AnalysisLevel>latest-recommended</AnalysisLevel>
<NoWarn>CA1849;CA2007;CA1508;CA1822;CA1805;CA1510;CA1816;CA1861;CA1845;CA2201;CA1848;CA1852;CA1305;CA1860;CA1707;CA1507;CA1806;CA2254</NoWarn>
<WarningsAsErrors>CS4014</WarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="10.0.10" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="7.0.2" />
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="10.0.10" />
<!-- Restrictive ACLs on the DPAPI credential files (the data dir parent, the *.dpapi files, the
transient init pwfile). Windows-only, like every credential surface here; the extension
methods (GetAccessControl/SetAccessControl/SetOwner) live in this package on a net10.0
(non-windows) TFM, which the service keeps so bring-your-own mode still runs cross-platform. -->
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="5.0.0" />
<!-- AN4: the analysis MCP tools over Streamable HTTP — Lite's exact MCP stack/version.
The AspNetCore package brings the Microsoft.AspNetCore.App framework reference
(Kestrel/WebApplication) transitively, same as it does for Lite. -->
<PackageReference Include="ModelContextProtocol" Version="2.0.0" />
<PackageReference Include="ModelContextProtocol.AspNetCore" Version="2.0.0" />
Comment on lines +29 to +33

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Two things about this hunk:

1. The AN4 comment is now a lie. Line 29 says "Lite's exact MCP stack/version." After this PR: Service is 2.0.0, but Lite/PerformanceMonitorLite.csproj:76-77 and PerformanceMonitor.Common/PerformanceMonitor.Common.csproj:20 remain at 1.4.1. Either bump the whole set together, or drop the "exact match" invariant.

2. 1.4.1 → 2.0.0 is a real major-version review, not a routine bump. From the release notes:

  • HttpServerTransportOptions.Stateless now defaults to true. This code sets Stateless = true explicitly at Mcp/DarlingMcpHostService.cs:399, so the default flip is benign — but the AspNetCore surface is otherwise stateless by default; audit any code path that assumed session-scoped semantics (SSE GET/DELETE, unsolicited server→client requests).
  • Roots / Sampling / Logging APIs deprecated → MCP9005 warnings. The <NoWarn> list on line 15 doesn't include MCP9005; if these APIs are hit anywhere, build will surface new warnings.
  • Tasks moved to a separate ModelContextProtocol.Extensions.Tasks package. Search for any Tasks use before merge.
  • Discovery-first negotiation is now the default — verify Lite (which is still 1.4.1) can still connect if these two are ever run against each other.

Recommend the maintainer read the 2.0.0 migration guide before merging and coordinate the bump across Common, Lite, PlanAnalysis, both Darling csprojs, and deprecated/Dashboard in one PR.


Generated by Claude Code

</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\PerformanceMonitor.Alerting\PerformanceMonitor.Alerting.csproj" />
<ProjectReference Include="..\..\PerformanceMonitor.Common\PerformanceMonitor.Common.csproj" />
<ProjectReference Include="..\..\PerformanceMonitor.Collectors\PerformanceMonitor.Collectors.csproj" />
<!-- AN3: the analysis pipeline (DarlingAnalysisService/PgPlanFetcher). Dependency points
service → analysis only; the analysis library never references the service. -->
<ProjectReference Include="..\PerformanceMonitor.Darling.Analysis\PerformanceMonitor.Darling.Analysis.csproj" />
<!-- The plan-analysis MCP tools run the SHARED ShowPlanParser/PlanAnalyzer and serialize via
McpPlanAnalysisFormatter (the same projection both apps' McpPlanTools call). Referenced
directly (it also flows transitively through Darling.Analysis) since it is a direct dependency. -->
<ProjectReference Include="..\..\PerformanceMonitor.PlanAnalysis\PerformanceMonitor.PlanAnalysis.csproj" />
<ProjectReference Include="..\PerformanceMonitor.Darling.Storage\PerformanceMonitor.Darling.Storage.csproj" />
</ItemGroup>
<ItemGroup>
<None Include="darling.sample.json" CopyToOutputDirectory="PreserveNewest" />
<!-- #1562: the web dashboard's static assets (Builder 3 owns wwwroot/). Copied beside the binary so the
web host's content/web root (pinned to AppContext.BaseDirectory) finds them under a Windows service. -->
<Content Include="wwwroot\**\*" CopyToOutputDirectory="PreserveNewest" />
<!-- The install/uninstall scripts ride the publish output to the ZIP ROOT (beside the exe), so both
the release and nightly zips carry them with no packaging-workflow changes - same delivery
mechanism as darling.sample.json. -->
<None Include="..\tools\install-darling.ps1" Link="install-darling.ps1" CopyToOutputDirectory="PreserveNewest" />
<None Include="..\tools\uninstall-darling.ps1" Link="uninstall-darling.ps1" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
<ItemGroup>
<InternalsVisibleTo Include="Darling.Tests" />
</ItemGroup>
</Project>
Loading
Loading