name: mcaf-dotnet-quality-ci
description: "Set up or refine open-source .NET code-quality gates for CI: formatting, .editorconfig, SDK analyzers, third-party analyzers, coverage, mutation testing, architecture tests, and security scanning. Use when a .NET repo needs an explicit quality stack in AGENTS.md, docs, or pipeline YAML."
compatibility: "Requires a .NET solution or project; may update AGENTS.md, CI workflows, a repo-root .editorconfig, Directory.Build.props, or analyzer package references."
MCAF: .NET Quality CI
Trigger On
- adding or tightening .NET code-quality gates in CI
- choosing analyzers, coverage, mutation, or architecture-test tooling for a .NET repo
- standardizing
.editorconfig,dotnet format, and warning policy
Value
- produce a concrete project delta: code, docs, config, tests, CI, or review artifact
- reduce ambiguity through explicit planning, verification, and final validation skills
- leave reusable project context so future tasks are faster and safer
Do Not Use For
- non-.NET repositories
- generic CI/CD guidance with no .NET quality stack decisions
- framework-specific test authoring with no quality-gate change
Inputs
- the nearest
AGENTS.md - the current repo-root
.editorconfigand MSBuild props - the current CI workflow and package references
- the active test runner model: VSTest or Microsoft.Testing.Platform
Quick Start
- Read the nearest
AGENTS.mdand confirm scope and constraints. - Run this skill's
Workflowthrough theRalph Loopuntil outcomes are acceptable. - Return the
Required Result Formatwith concrete artifacts and verification evidence.
Workflow
- Start with the repo-native baseline:
- repo-root
.editorconfig dotnet format --verify-no-changes- SDK analyzers with explicit
EnableNETAnalyzers,AnalysisLevel, and warning policy
- repo-root
- Add third-party analyzers only where they close a real gap:
StyleCopAnalyzersRoslynatorMeziantou.Analyzer- framework analyzers such as xUnit, MSTest, or TUnit analyzers
- Separate quality gates by purpose:
- formatting and style
- correctness and static analysis
- coverage and reports
- architecture rules
- security scanning
- mutation testing
- For complexity, use a composite approach:
- CA1502 thresholding
- maintainability limits in
AGENTS.md - architecture tests
- coverage and mutation where risk justifies it
- Make ownership explicit in
AGENTS.mdand CI:- which command formats
- which command analyzes
- which command measures coverage
- which runner model the tests use
- After any .NET code change, the repo's quality pass must be runnable by agents:
- format
- build
- analyze
- focused tests
- broader tests
- coverage and report generation when configured
- extra configured gates only when the repo actually enabled them
- Route tool-specific setup through dedicated skills where possible:
mcaf-dotnet-formatmcaf-dotnet-code-analysismcaf-dotnet-analyzer-config- analyzer-pack skills such as
mcaf-dotnet-stylecop-analyzers,mcaf-dotnet-roslynator, andmcaf-dotnet-meziantou-analyzer - coverage/reporting skills such as
mcaf-dotnet-coverletandmcaf-dotnet-reportgenerator - architecture/security skills such as
mcaf-dotnet-netarchtest,mcaf-dotnet-archunitnet, andmcaf-dotnet-codeql
- Avoid overlapping tools with conflicting ownership. If you add an opinionated formatter, define whether it replaces or complements
dotnet format.
Bootstrap When Missing
If a quality gate is requested but not configured, use this activation path:
- Detect current state in
.csproj,Directory.Build.*,.editorconfig, tool manifests, and CI workflow files. - Choose exactly one owner command per gate category (format, analyze, test, coverage, architecture, security, mutation).
- Install the minimal required package or tool and commit checked-in config files.
- Wire the gate into both
AGENTS.mdand CI with explicit commands. - Run a first verify pass, fix actionable failures, and rerun.
- Return
status: configuredif newly enabled and passing, orstatus: improvedif issues remain but baseline improved. - Return
status: not_applicableonly when the gate is explicitly out of scope for this repo.
Deliver
- a documented .NET quality baseline
- CI commands that are explicit and reproducible
- analyzer and coverage choices that match the repo's runner model
- a documented post-change quality pass for agents and CI
- tool selection that stays open-source and free by default, with caveats called out explicitly
Validate
- repo-root
.editorconfigis the default source of truth for per-rule severity - formatting, analyzer, and coverage commands are runner-compatible
- added tools cover distinct gaps instead of duplicating each other
- complexity and architecture policy are explicit, not implied
- .NET code changes are expected to pass more than tests alone when quality gates are configured
- any licensing or hosting caveat is documented before the tool becomes a default gate
Ralph Loop
Use the Ralph Loop for every task, including docs, architecture, testing, and tooling work.
- Plan first (mandatory):
- analyze current state
- define target outcome, constraints, and risks
- write a detailed execution plan
- list final validation skills to run at the end, with order and reason
- Execute one planned step and produce a concrete delta.
- Review the result and capture findings with actionable next fixes.
- Apply fixes in small batches and rerun the relevant checks or review steps.
- Update the plan after each iteration.
- Repeat until outcomes are acceptable or only explicit exceptions remain.
- If a dependency is missing, bootstrap it or return
status: not_applicablewith explicit reason and fallback path.
Required Result Format
status:complete|clean|improved|configured|not_applicable|blockedplan: concise plan and current iteration stepactions_taken: concrete changes madevalidation_skills: final skills run, or skipped with reasonsverification: commands, checks, or review evidence summaryremaining: top unresolved items ornone
For setup-only requests with no execution, return status: configured and exact next commands.
Load References
- read
references/editorconfig-and-ci.mdfirst - open
references/quality-toolchain.mdfor the curated OSS tool list - use the dedicated tool skill when you are installing, configuring, or debugging one specific tool
Example Requests
- "Define the best OSS CI stack for this .NET repo."
- "Add .NET analyzers, coverage, and mutation testing guidance."
- "Make
.editorconfigand CI agree in our .NET solution."