convention-learnerlisted
Install: claude install-skill lamuniercosta/dotnet-agent-harness
# Convention Learner
Adapted from [codewithmukesh/dotnet-claude-kit](https://github.com/codewithmukesh/dotnet-claude-kit) (MIT). The upstream Roslyn MCP calls are replaced with Grep/Glob/Read plus this harness's gate scripts.
## Core Principles
1. **Observe before enforcing.** Never impose a convention without first reading the existing code. Detect first, then match.
2. **Repo config always wins.** `.editorconfig`, `Directory.Build.props`, `CodeMetricsConfig.txt`, `global.json`, `harness.yml`, and the repo's rules override any generic default.
3. **Use objective signals.** Grep/Glob for structure and naming; run the gate scripts for quality signals. Tools give data; file reads confirm intent.
4. **Document findings where they live.** Recurring conventions belong in a rules file — `.cursor/rules/*.mdc` on Cursor, an `@import` from `CLAUDE.md` on Claude Code. Domain terms belong in `CONTEXT.md` via `/domain-modeling`. Undocumented conventions are lost.
5. **Consistency over theoretical purity.** Match the dominant existing pattern even if another is arguably better.
## Detection flow
**Step 1 — Structure.** `Glob` `src/**` and `tests/**`, then name the organising principle out loud before reading any code. The three you will actually meet:
- **Layered** — top-level projects like `Api` / `Business` / `Data` / `Common` / `Setup`, features as subfolders inside each (`Business/Commands/{Feature}`). Dependencies point one way.
- **Vertical slice** — top-level `Features/{Featu