Pacmon

Dependency notes for .NET

A PackageReference records a package ID and a version. It does not say why the package is there, which framework upgrade it is waiting for, or which packages have to move with it. An XML comment has room for a phrase, and it stays in the one project file that has it.

Pacmon keeps a note for each package in .pacmon/nuget/DEPENDENCY-NOTES.md and shows it on the package's line. C#, F# and Visual Basic projects are read alike, and under central package management the versions in Directory.Packages.props are read too, keyed by the same package ID.

What Pacmon reads

Pacmon reads literal PackageReference Include items in C#, F# and VB project files; and PackageVersion Include/Update plus GlobalPackageReference Include items in Directory.Packages.props. Package IDs are matched case-insensitively. Imports, MSBuild expressions, project/framework references, downloads and transitive packages are not evaluated.

Pacmon never runs .NET, MSBuild or NuGet, so it needs no SDK and restores nothing.

Example

<ItemGroup>
  <PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.11" />
  <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.11" />
  <PackageReference Include="Serilog.AspNetCore" Version="8.0.3" />
</ItemGroup>

.pacmon/nuget/DEPENDENCY-NOTES.md:

## Microsoft.EntityFrameworkCore

Stay on 8 until the API moves to .NET 9 (PLAT-212).

### Agent notes

- purpose: ORM for the orders database
- constraint: keep the major equal to the target framework (net8.0)
- bump-with: Npgsql.EntityFrameworkCore.PostgreSQL
- verify: `dotnet test` and `dotnet ef database update` on an empty database
- verified: 8.0.11

The heading is the package ID as the project file writes it; IDs are matched without regard to case.

Editors

The notes file is the same in all three, so one team can mix them: Visual Studio 2022 and newer on Windows, Rider and other JetBrains IDEs, and VS Code. In Visual Studio the note shows in Quick Info on the package ID, the Pacmon mark beside it opens the note, and Tools → Options → Pacmon holds the settings.

For AI coding agents

An agent reads a package's section before it adds, upgrades or removes the package. bump-with: lists the packages that have to move with it, and verify: the tests to run afterwards. See the rules agents follow.