mir-backend-dotnetlisted
Install: claude install-skill anantbhandarkar/make-it-right
# /mir-backend-dotnet · Make It Right (.NET runtime)
The middle tier. `mir-backend` decides **what is correct** (any language). The framework module (e.g. `mir-backend-dotnet-aspnetcore`) knows the **library's mechanics**. This tier owns what's true for **all .NET backends because they run on the CLR** — the async model, thread pool, DI container, and object lifetime rules that ASP.NET Core, gRPC services, background workers, and SignalR hubs all inherit.
**Runtime assumed (verified 13 Aug 2026):** **.NET 10** — the current LTS, shipped Nov 2025, supported to Nov 2028. Latest patch is **10.0.11 (11 Aug 2026)**; the corresponding .NET 9 / .NET 8 patches are **9.0.19** and **8.0.30**.
**.NET 8 (LTS) and .NET 9 (STS) both reach end of support on 10 Nov 2026** — the same day, because STS moved to a 24-month window. After that date neither gets security fixes. A new service targeting `net8.0` or `net9.0` today is a migration item with under three months of runway, not a default; say so at Gate 0 rather than accepting the TFM silently. .NET 11 is the next STS (expected Nov 2026) and is in preview as of this writing — do not target it in production.
Load order: `mir-backend` → `mir-backend-dotnet` → `<framework module>`.
## The CLR footguns AI walks into (framework-agnostic)
### 1. Sync-over-async — the classic deadlock and thread-pool starvation trap
Calling `.Result`, `.Wait()`, or `.GetAwaiter().GetResult()` on a `Task` or `ValueTask` from synchronous code is the #1 async