Skip to content

Commit e0a8817

Browse files
committed
Externalize .NET skills and require brainstorming first
1 parent c0d82bb commit e0a8817

73 files changed

Lines changed: 276 additions & 5346 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,10 @@ The public skill catalog lives on the Skills page:
112112
- [https://mcaf.managed-code.com/skills](https://mcaf.managed-code.com/skills)
113113

114114
Platform-specific bundles can stay small and still be explicit.
115-
For example, a typical .NET repo baseline can install `mcaf-dotnet` as the entry skill, `mcaf-dotnet-features`, `mcaf-solution-governance`, `mcaf-testing`, exactly one of `mcaf-dotnet-xunit`, `mcaf-dotnet-tunit`, or `mcaf-dotnet-mstest`, plus `mcaf-dotnet-quality-ci`, `mcaf-dotnet-complexity`, `mcaf-solid-maintainability`, `mcaf-architecture-overview`, and `mcaf-ci-cd`.
116-
In that setup, `mcaf-dotnet` knows when to open the more specific .NET skills, the repo-root lowercase `.editorconfig` is the default source of truth for formatting and analyzer severity, and `AGENTS.md` records the exact `dotnet build`, `dotnet test`, `dotnet format`, `analyze`, and coverage commands. Nested `.editorconfig` files are allowed when they serve a clear subtree-specific purpose, such as stricter domain rules, generated-code handling, test-specific conventions, or legacy-code containment.
117-
For .NET code changes, the task is not done when tests are green if the repo also configured formatters, analyzers, coverage, architecture tests, or security gates. Agents should run the repo-defined post-change quality pass before completion.
118-
If the repo standardizes on concrete tools, install the matching tool skills as well. Typical open or free .NET additions include `mcaf-dotnet-format`, `mcaf-dotnet-code-analysis`, `mcaf-dotnet-analyzer-config`, `mcaf-dotnet-stylecop-analyzers`, `mcaf-dotnet-roslynator`, `mcaf-dotnet-meziantou-analyzer`, `mcaf-dotnet-cloc`, `mcaf-dotnet-coverlet`, `mcaf-dotnet-profiling`, `mcaf-dotnet-quickdup`, `mcaf-dotnet-reportgenerator`, `mcaf-dotnet-resharper-clt`, `mcaf-dotnet-stryker`, `mcaf-dotnet-netarchtest`, `mcaf-dotnet-archunitnet`, and `mcaf-dotnet-csharpier`. `mcaf-dotnet-codeql` stays available, but should be chosen only when its hosting and licensing model fits the repository.
119-
Every `mcaf-dotnet*` tool skill should include a `Bootstrap When Missing` section so agents can detect, install, verify, and first-run the tool without guessing.
115+
The `.NET` skill bundle is maintained outside this repository at [managedcode/dotnet-skills](https://github.com/managedcode/dotnet-skills).
116+
Install the `.NET` skills you need from that repository, then document the exact `dotnet build`, `dotnet test`, `dotnet format`, `analyze`, and coverage commands in the consuming repo’s `AGENTS.md`.
117+
For `.NET` code changes, the task is not done when tests are green if the repo also configured formatters, analyzers, coverage, architecture tests, or security gates.
118+
Agents should run the repo-defined post-change quality pass before completion, and any external `mcaf-dotnet*` tool skill should still include a `Bootstrap When Missing` section so agents can detect, install, verify, and first-run the tool without guessing.
120119

121120
### 2.5 Context Rules
122121

@@ -214,7 +213,7 @@ Root `AGENTS.md` stays current with:
214213
- commands (`build`, `test`, `format`, `analyze`, `coverage` if used)
215214
- global skills and when to use them
216215
- self-learning rules
217-
- non-trivial task planning rules, including root-level `<slug>.plan.md` usage
216+
- non-trivial task workflow rules, including root-level `<slug>.brainstorm.md` and `<slug>.plan.md` usage
218217
- testing discipline
219218
- done criteria for tests, coverage, and quality gates
220219
- design and maintainability rules
@@ -261,7 +260,8 @@ If the same mistake happens twice, the framework expects the rule to be made dur
261260
- Every MCAF repo has a root `AGENTS.md`.
262261
- Multi-project solutions use local `AGENTS.md` files at project roots.
263262
- Agents read root and local `AGENTS.md` before editing code.
264-
- Non-trivial tasks use a root-level `<slug>.plan.md` as the working plan.
263+
- Non-trivial tasks start with a root-level `<slug>.brainstorm.md`, then move into a root-level `<slug>.plan.md`.
264+
- Brainstorms capture thinking, options, trade-offs, and the chosen direction before implementation starts.
265265
- Plans include ordered implementation steps, explicit test steps, testing methodology, and final validation commands.
266266
- Skills are preferred over improvised workflow when a skill matches the task.
267267
- Numeric maintainability limits live in `AGENTS.md`, not in framework prose.
@@ -349,9 +349,23 @@ Before heavy coding:
349349
3. align test expectations
350350
4. identify the right skills
351351

352-
### 7.2 Plan
352+
### 7.2 Brainstorm
353353

354-
For non-trivial work, create a root-level `<slug>.plan.md` and keep it current.
354+
For non-trivial work, start with a root-level `<slug>.brainstorm.md` and keep it concise.
355+
The brainstorm records:
356+
357+
- the problem to solve
358+
- scope and constraints
359+
- relevant context and assumptions
360+
- candidate approaches or options
361+
- trade-offs, risks, and open questions
362+
- the recommended direction that will become the plan
363+
364+
Brainstorm first, think through the task, then convert the chosen direction into a working plan.
365+
366+
### 7.3 Plan
367+
368+
For non-trivial work, create a root-level `<slug>.plan.md` after the brainstorm direction is chosen, and keep it current.
355369
The plan records:
356370

357371
- goal and scope
@@ -367,15 +381,15 @@ The plan records:
367381
Before implementation starts, run the full relevant test baseline.
368382
If anything is already failing, add each failing test to the plan with its symptom, suspected or confirmed root cause, and intended fix path.
369383

370-
### 7.3 Implement
384+
### 7.4 Implement
371385

372-
- Use the Ralph Loop for non-trivial work: execute one planned step, run the relevant checks, update the plan, then move to the next step.
386+
- Use the Ralph Loop for non-trivial work: brainstorm first, turn the chosen direction into a plan, execute one planned step, run the relevant checks, update the plan, then move to the next step.
373387
- implement code and tests together
374388
- keep changes small and reviewable
375389
- fix failing tests deliberately, one by one, and track them in the plan until they are closed
376390
- use the architecture map and nearest local `AGENTS.md` to stay in scope
377391

378-
### 7.4 Verify
392+
### 7.5 Verify
379393

380394
Run verification in layers:
381395

@@ -385,7 +399,7 @@ Run verification in layers:
385399
4. analyzers, formatters, and any configured architecture, security, mutation, or other quality gates
386400
5. coverage comparison against the pre-change baseline
387401

388-
### 7.5 Update Durable Context and Close the Task
402+
### 7.6 Update Durable Context and Close the Task
389403

390404
After implementation:
391405

@@ -429,6 +443,6 @@ Adoption is complete when:
429443
- the right skills are installed
430444
- multi-project boundaries have local `AGENTS.md`
431445
- commands and docs reflect the real repo
432-
- non-trivial work is guided by a root-level `<slug>.plan.md` and the Ralph Loop
446+
- non-trivial work is guided by root-level `<slug>.brainstorm.md`, `<slug>.plan.md`, and the Ralph Loop
433447
- tool-specific skills document real bootstrap and install steps when the tool is missing
434448
- tests and analyzers are the real gates

TUTORIAL.md

Lines changed: 13 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ Rules:
2929
- install only current skills with prefix mcaf-
3030
- keep AGENTS.md in the repository root
3131
- if this is a multi-project solution, create or update local AGENTS.md files per project
32+
- if this is a .NET repo, fetch the needed `mcaf-dotnet*` skills from https://github.com/managedcode/dotnet-skills
3233
```
3334

3435
---
@@ -103,64 +104,30 @@ This keeps install deterministic without requiring manifests or archives.
103104

104105
### 4.0 Recommended .NET Bundle
105106

106-
For a .NET repository, the usual baseline is:
107+
This repository no longer bundles `.NET` skills under `skills/`.
108+
Fetch the `.NET` skill bundle from [managedcode/dotnet-skills](https://github.com/managedcode/dotnet-skills).
107109

108-
- `mcaf-dotnet`
109-
- `mcaf-dotnet-features`
110-
- `mcaf-solution-governance`
111-
- `mcaf-testing`
112-
- exactly one of:
113-
- `mcaf-dotnet-xunit`
114-
- `mcaf-dotnet-tunit`
115-
- `mcaf-dotnet-mstest`
116-
- `mcaf-dotnet-quality-ci`
117-
- `mcaf-dotnet-complexity`
118-
- `mcaf-solid-maintainability`
119-
- `mcaf-architecture-overview`
120-
- `mcaf-ci-cd`
121-
122-
For .NET repositories, also make these repo-native artifacts explicit:
110+
For `.NET` repositories, keep these repo-native artifacts explicit in `AGENTS.md`:
123111

124112
- a repo-root `.editorconfig` as the analyzer and formatting source of truth
125113
- project-specific nested `.editorconfig` files when a subtree has a clear different purpose or policy
126114
- `Directory.Build.props` or project files for bulk analyzer and runner settings
127115
- target `TFM` and explicit `LangVersion` only when the repo intentionally differs from the SDK default
128116
- whether the solution uses `VSTest` or `Microsoft.Testing.Platform`
117+
- the non-trivial task flow: `<slug>.brainstorm.md` first, then `<slug>.plan.md`, then implementation and validation
118+
119+
The intended `.NET` flow stays the same even though the bundle is external:
129120

130-
The intended flow is:
131-
132-
- `mcaf-dotnet` is the entry skill for normal C# or .NET work
133-
- `mcaf-dotnet-features` decides which modern language features are safe to use, especially for C# 13 on `.NET 9` and C# 14 on `.NET 10`
134-
- the framework-specific test skill handles xUnit, TUnit, or MSTest mechanics
135-
- after code changes, agents run the repo-defined quality pass: format, build, analyze, tests, coverage, and any configured extra gates
136-
137-
The baseline above is intentionally small.
138-
Add tool-specific .NET skills only when the repo standardizes on them:
139-
140-
<!-- MCAF:DOTNET-OPTIONAL-SKILLS-BEGIN -->
141-
- `mcaf-dotnet-analyzer-config`
142-
- `mcaf-dotnet-archunitnet`
143-
- `mcaf-dotnet-cloc`
144-
- `mcaf-dotnet-code-analysis`
145-
- `mcaf-dotnet-codeql`
146-
- `mcaf-dotnet-coverlet`
147-
- `mcaf-dotnet-csharpier`
148-
- `mcaf-dotnet-format`
149-
- `mcaf-dotnet-meziantou-analyzer`
150-
- `mcaf-dotnet-netarchtest`
151-
- `mcaf-dotnet-profiling`
152-
- `mcaf-dotnet-quickdup`
153-
- `mcaf-dotnet-reportgenerator`
154-
- `mcaf-dotnet-resharper-clt`
155-
- `mcaf-dotnet-roslynator`
156-
- `mcaf-dotnet-stryker`
157-
- `mcaf-dotnet-stylecop-analyzers`
158-
<!-- MCAF:DOTNET-OPTIONAL-SKILLS-END -->
121+
- install the matching `mcaf-dotnet*` skills from the external repository
122+
- use the orchestration and test-framework skills that fit the repo
123+
- after code changes, run the repo-defined quality pass: format, build, analyze, tests, coverage, and any configured extra gates
159124

160125
### 4.1 Current Skill Catalog (Generated)
161126

162127
The website build generates this list from the actual folders under `skills/`.
163128

129+
`.NET` skills are excluded here because they live in the external repository above.
130+
164131
<!-- MCAF:ALL-SKILLS-BEGIN -->
165132
- `mcaf-adr-writing`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-adr-writing), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-adr-writing/SKILL.md)
166133
- `mcaf-agile-delivery`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-agile-delivery), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-agile-delivery/SKILL.md)
@@ -169,30 +136,6 @@ The website build generates this list from the actual folders under `skills/`.
169136
- `mcaf-code-review`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-code-review), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-code-review/SKILL.md)
170137
- `mcaf-devex`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-devex), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-devex/SKILL.md)
171138
- `mcaf-documentation`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-documentation), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-documentation/SKILL.md)
172-
- `mcaf-dotnet`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet/SKILL.md)
173-
- `mcaf-dotnet-analyzer-config`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-analyzer-config), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-analyzer-config/SKILL.md)
174-
- `mcaf-dotnet-archunitnet`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-archunitnet), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-archunitnet/SKILL.md)
175-
- `mcaf-dotnet-cloc`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-cloc), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-cloc/SKILL.md)
176-
- `mcaf-dotnet-code-analysis`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-code-analysis), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-code-analysis/SKILL.md)
177-
- `mcaf-dotnet-codeql`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-codeql), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-codeql/SKILL.md)
178-
- `mcaf-dotnet-complexity`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-complexity), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-complexity/SKILL.md)
179-
- `mcaf-dotnet-coverlet`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-coverlet), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-coverlet/SKILL.md)
180-
- `mcaf-dotnet-csharpier`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-csharpier), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-csharpier/SKILL.md)
181-
- `mcaf-dotnet-features`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-features), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-features/SKILL.md)
182-
- `mcaf-dotnet-format`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-format), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-format/SKILL.md)
183-
- `mcaf-dotnet-meziantou-analyzer`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-meziantou-analyzer), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-meziantou-analyzer/SKILL.md)
184-
- `mcaf-dotnet-mstest`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-mstest), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-mstest/SKILL.md)
185-
- `mcaf-dotnet-netarchtest`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-netarchtest), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-netarchtest/SKILL.md)
186-
- `mcaf-dotnet-profiling`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-profiling), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-profiling/SKILL.md)
187-
- `mcaf-dotnet-quality-ci`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-quality-ci), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-quality-ci/SKILL.md)
188-
- `mcaf-dotnet-quickdup`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-quickdup), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-quickdup/SKILL.md)
189-
- `mcaf-dotnet-reportgenerator`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-reportgenerator), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-reportgenerator/SKILL.md)
190-
- `mcaf-dotnet-resharper-clt`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-resharper-clt), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-resharper-clt/SKILL.md)
191-
- `mcaf-dotnet-roslynator`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-roslynator), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-roslynator/SKILL.md)
192-
- `mcaf-dotnet-stryker`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-stryker), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-stryker/SKILL.md)
193-
- `mcaf-dotnet-stylecop-analyzers`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-stylecop-analyzers), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-stylecop-analyzers/SKILL.md)
194-
- `mcaf-dotnet-tunit`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-tunit), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-tunit/SKILL.md)
195-
- `mcaf-dotnet-xunit`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-dotnet-xunit), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-dotnet-xunit/SKILL.md)
196139
- `mcaf-feature-spec`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-feature-spec), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-feature-spec/SKILL.md)
197140
- `mcaf-human-review-planning`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-human-review-planning), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-human-review-planning/SKILL.md)
198141
- `mcaf-ml-ai-delivery`[Folder](https://github.com/managedcode/MCAF/blob/main/skills/mcaf-ml-ai-delivery), [Raw SKILL](https://raw.githubusercontent.com/managedcode/MCAF/main/skills/mcaf-ml-ai-delivery/SKILL.md)
@@ -293,5 +236,6 @@ Use a prompt like this:
293236
Analyze this solution and customize the root AGENTS.md.
294237
If this is a multi-project solution, create project-local AGENTS.md files in each project root.
295238
Then identify which MCAF skills apply to each project and document them in the local AGENTS files.
239+
For non-trivial tasks, require a root-level <slug>.brainstorm.md before <slug>.plan.md.
296240
Finally, update docs/Architecture.md so agents can scope work without repo-wide scanning.
297241
```

0 commit comments

Comments
 (0)