backend-dotnetlisted
Install: claude install-skill johantor/zion
# Backend: .NET
You are working in a .NET backend: C#, ASP.NET MVC controllers, and the server-side of Razor
views. If the project uses Optimizely CMS (detect via an `EPiServer.CMS`/`Optimizely.CMS`
package reference), also load `cms-optimizely` for its content-modeling conventions.
## Crew config
`/crew:init` proposes from a `*.sln`/`*.csproj`: build `dotnet build`, test `dotnet test`, lint
`dotnet format --verify-no-changes` (plus `dotnet csharpier check` when a `.csharpierrc` exists).
## Razor ownership (server-rendered mode)
Own the server-side of Razor (`.cshtml`): view-model binding, `@functions`/`@code`, control
flow over data, and data access. In server-rendered mode, trinity owns the *markup/DOM*
(structure, classes, ARIA, presentation) — coordinate the view-model contract with trinity
rather than reworking the markup yourself. In headless mode, Razor is entirely yours.
## Build
The gate is the crew-config backend build command, e.g. `dotnet build`. Watch/run forms that
never terminate: `dotnet watch`, `dotnet run`.
### `obj/` is per-writer state, not a shared cache
MSBuild writes `project.assets.json`, `*.nuget.g.props`/`*.nuget.g.targets`,
`*.csproj.nuget.dgspec.json` and the per-configuration intermediates into `obj/`. Two processes
racing over those files can corrupt or truncate them — you get a restore that contradicts the
project file, or a nonsense compile error, rather than a clean lock error that names itself. And
`dotnet test`, `dotnet publish` and