api-versioning
API versioning strategies for ASP.NET Core. Covers Asp.Versioning library, URL segment,…
Architecture conformance check: verifies an existing codebase against its declared architecture (VSA, Clean Architecture, DDD, Modular Monolith) — dependency direction, layer violations, module boundary leaks, and cycles — using token-cheap Roslyn MCP analysis. Invoke when:
$ npx -y skills add codewithmukesh/dotnet-claude-kit --skill arch-check --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/arch-checkContext preview
The summary Claude sees to decide when to auto-load this skill.
Architecture conformance check: verifies an existing codebase against its declared architecture (VSA, Clean Architecture, DDD, Modular Monolith) — dependency direction, layer violations, module boundary leaks, and cycles — using token-cheap Roslyn MCP analysis. Invoke when:
name: arch-check description: > Architecture conformance check: verifies an existing codebase against its declared architecture (VSA, Clean Architecture, DDD, Modular Monolith) — dependency direction, layer violations, module boundary leaks, and cycles — using token-cheap Roslyn MCP analysis. Invoke when: "check architecture", "architecture violations", "layer violations", "dependency direction", "module boundaries", "arch check", "is my architecture clean", "enforce architecture", "conformance check". For CHOOSING an architecture, use architecture-advisor instead.
Verifies that the code still matches the architecture it claims to have. Architectures rot through small, individually-reasonable changes — a Domain project that gains an EF Core reference, a module that reaches into a sibling's internals, an endpoint defined outside the host. This workflow catches the rot using project-graph and dependency analysis, not file-by-file reading.
Output: a violation report with severity, file:line evidence, and the concrete fix — or a clean conformance pass.
**Step 1: Establish the declared architecture**
In order of authority: the project's CLAUDE.md, an ADR in `docs/decisions/`, or ask the user. Never infer silently — a wrong baseline produces a wrong report. The four supported baselines and their rules:
| Architecture | Rules checked | |---|---| | Vertical Slice | Features don't reference sibling features; shared code only via explicitly shared folders/projects | | Clean Architecture | Domain → nothing; Application → Domain only; Infrastructure → Application; Api → Application (never Api → Infrastructure types, wiring only) | | DDD + Clean | Clean rules + aggregates referenced only via roots; domain events for cross-aggregate effects | | Modular Monolith | No project references between modules except `*.Contracts`; cross-module calls via integration events or contracts |
**Step 2: Project-level dependency direction (cheapest, catches most)**
get_project_graph()
Map every project reference against the baseline's allowed arrows. A single wrong reference here (Domain → Infrastructure) is a CRITICAL finding — it makes every downstream violation possible.
**Step 3: Cycles**
detect_circular_dependencies()
Cycles are violations in every baseline. Report the full chain.
**Step 4: Namespace-level leaks (spot checks)**
Project references can be clean while code still leaks. Probe the risky edges:
get_dependency_graph(symbolName: <a Domain entity>, depth: 2) -- Domain types pulling in EF Core, HttpClient, or Infrastructure namespaces? find_references(symbolName: <a module-internal type>) -- referenced from outside its module? detect_antipatterns() -- known structural smells as supporting evidence
Pick probes by baseline: Clean → sample 3-5 Domain entities and Application handlers; Modular Monolith → sample each module's internal types; VSA → sample types inside two or three feature folders.
**Step 5: Presentation boundary**
get_endpoint_map()
Endpoints must live only in the host/Api layer (Clean) or inside their owning module (Modular Monolith, VSA feature folders). An endpoint defined in an Application or shared project is a boundary violation. Unmarked auth on any endpoint is reported as a side-finding (route to `/security-scan` for depth).
**Step 6: Report**
| Severity | Meaning | |---|---| | CRITICAL | Wrong-direction project reference, module-to-module reference, cycle | | HIGH | Namespace leak (Domain using Infrastructure/EF types), endpoint outside its layer | | MEDIUM | Shared-kernel logic creep, aggregate bypassed via direct member access | | INFO | Unmarked endpoint auth, antipattern hits worth a look |
Each finding: evidence (file:line), why it violates the baseline, and the fix (move the code, invert with an interface, introduce a contracts project, raise an integration event). Offer to fix CRITICAL items immediately.
User: /arch-check
Claude: Baseline from CLAUDE.md: Clean Architecture (4 projects).
Project graph (get_project_graph)...
CRITICAL Domain → Infrastructure reference (Domain.csproj:14)
Breaks the dependency rule; makes Domain untestable in isolation.
Fix: invert — define IEmailSender in Application, implement in
Infrastructure.
Cycles (detect_circular_dependencies)... none.
Leak probes on 4 Domain entities...
HIGH Order.cs:8 uses Microsoft.EntityFrameworkCore (Domain must stay
persistence-ignorant). Fix: move the [Index] config to
OrderConfiguration in Infrastructure.
Endpoint map... 23 endpoints, all in Api. 2 unmarked auth (side-finding —
run /security-scan).
Verdict: NOT conformant — 1 critical, 1 high. Fix the reference first;
want me to do it now?API versioning strategies for ASP.NET Core. Covers Asp.Versioning library, URL segment,…
Architecture selection advisor for .NET applications. Asks structured questions about domain…
.NET Aspire for cloud-native orchestration. Covers AppHost configuration, service defaults,…
Authentication and authorization for ASP.NET Core. Covers JWT bearer tokens, OpenID Connect,…
Autonomous iteration loops for .NET: drive a broken build or failing test suite to green with…
Caching strategies for .NET 10 applications. Covers HybridCache (the default), output…