debt-taxonomy-dotnetlisted
Install: claude install-skill johantor/zion
# Debt taxonomy — .NET / C#
Apply this skill when `debt-taxonomy` stack detection finds a .NET project (`*.csproj`,
`*.sln`, `Directory.Packages.props`, `global.json`). The rubric, the justified-suppression
filter, the blast-radius gate and the upgrade workflow are in the core skill; this skill supplies
the .NET rows they consume.
## Suppression mechanisms
One row per mechanism: its scope, where a keep-decision lives, what a grep-only pass reads as
"likely stale" (audit's `stale` scope never builds — `/crew:debt` proves a candidate with
`dotnet build` of the affected project), and how a worker removes it. .NET is the weaker stack
for justifications: only the `SuppressMessage` family has a native slot, so the rest rely on
project-level policy.
| Mechanism | Scope | Justification slot | Stale signal (grep-only) | Removal |
|---|---|---|---|---|
| `#pragma warning disable CS####` … `restore` | Block | **None native.** A trailing `// reason` on the `disable` line is the convention and is read as the justification; a bare `disable` is unjustified | The surrounded lines have no trigger for the diagnostic (a `CS8602` block over a line with no `.` member access; `CS0168` over a line with no declaration), or `restore` is missing or far from `disable` | Delete both the `disable` and the matching `restore` |
| `[SuppressMessage("category", "id", Justification = "…")]` | Member/type | The `Justification` param, e.g. `Justification = "validated by the ASP.NET model binder"` | The memb