From 6f287f1f5575f3321be1869360b19dd2ec1142ca Mon Sep 17 00:00:00 2001
From: Stephen Walsh <868017+stphnwlsh@users.noreply.github.com>
Date: Sat, 7 Nov 2026 16:03:38 -0600
Subject: [PATCH 1/3] Ship a starter README in generated solutions
---
.agents/skills/template-authoring/SKILL.md | 4 ++--
.github/workflows/build-pipeline.yml | 1 +
CleanModelContextProtocol.slnx | 1 +
template/README.md | 23 ++++++++++++++++++++++
template/template.csproj | 3 ++-
5 files changed, 29 insertions(+), 3 deletions(-)
create mode 100644 template/README.md
diff --git a/.agents/skills/template-authoring/SKILL.md b/.agents/skills/template-authoring/SKILL.md
index 131eb65..8093079 100644
--- a/.agents/skills/template-authoring/SKILL.md
+++ b/.agents/skills/template-authoring/SKILL.md
@@ -45,7 +45,7 @@ The repository itself stays all on. The Presentation project and the presentatio
A toggle's inputs, such as `authority` and `audience`, are separate symbols, enabled with `isEnabled` and made required with `isRequired` only when the toggle is on. Only `dotnet new` honours those two. Visual Studio and Rider show every input whatever the toggle says ([dotnet/templating#7860](https://github.com/dotnet/templating/issues/7860)), and Rider lists checkboxes first, then text fields in alphabetical order by label. So an input's label starts with its feature, such as "Authentication authority", to sit right under its checkbox, and its IDE description says it's only used when that box is ticked. A toggle that needs another one says so in its conditions, such as `(includeTests && includeArchitectureTests)`. Verify Template checks the defaults, everything on, everything off, and each toggle flipped on its own.
-The package includes `src/`, `tests/`, `docs/RUN.md`, the root build files, `AGENTS.md`, `CLAUDE.md`, the persona and the engineering skills. It also packs `template/ci.yml` as the generated solution's `.github/workflows/ci.yml`, a small pipeline with no template name in it. It leaves out the rest of `.github/`, the community files and the repository and maintainer skills, which only make sense in the template repository. Those skills are listed in `RepositorySkills` in `template/template.csproj`; a new one is added there. The pipeline fails a package over 1 MB.
+The package includes `src/`, `tests/`, `docs/RUN.md`, the root build files, `AGENTS.md`, `CLAUDE.md`, the persona and the engineering skills. It also packs `template/README.md` as the generated solution's `README.md` and `template/ci.yml` as `.github/workflows/ci.yml`, while leaving the template repository's own `README.md`, the rest of `.github/`, the community files and the repository and maintainer skills out. Those skills are listed in `RepositorySkills` in `template/template.csproj`; a new one is added there. The pipeline fails a package over 1 MB.
## Getting found
@@ -96,4 +96,4 @@ The README and `NUGET.md` name the aliases under the install commands, and the d
## Check
-The Test job's Verify Template step installs the packed template, generates a solution and checks that nothing of the template leaked into it (no `includeAuth` markers, no trace of the template's own name, no `icon.png`) and that it has `.github/workflows/ci.yml`, then checks its format and runs its tests. Where the template has `--include-auth` it does it again with the toggle on, and checks that `--include-auth` without `--authority` is refused with exit code 102.
+The Test job's Verify Template step installs the packed template, generates a solution and checks that nothing of the template leaked into it (no `includeAuth` markers, no trace of the template's own name, no `icon.png`) and that it has `README.md` and `.github/workflows/ci.yml`, then checks its format and runs its tests. Where the template has `--include-auth` it does it again with the toggle on, and checks that `--include-auth` without `--authority` is refused with exit code 102.
diff --git a/.github/workflows/build-pipeline.yml b/.github/workflows/build-pipeline.yml
index 2cfa455..0f5d9fe 100644
--- a/.github/workflows/build-pipeline.yml
+++ b/.github/workflows/build-pipeline.yml
@@ -237,6 +237,7 @@ jobs:
clean "$1" includeAuth
clean "$1" "$SOURCE_NAME"
test ! -e "$1/icon.png"
+ test -f "$1/README.md"
test -f "$1/.github/workflows/ci.yml"
dotnet format "$1" --verify-no-changes
dotnet test "$1" --configuration Release
diff --git a/CleanModelContextProtocol.slnx b/CleanModelContextProtocol.slnx
index f13157f..1cae821 100644
--- a/CleanModelContextProtocol.slnx
+++ b/CleanModelContextProtocol.slnx
@@ -14,6 +14,7 @@
+
diff --git a/template/README.md b/template/README.md
new file mode 100644
index 0000000..2f7d2bf
--- /dev/null
+++ b/template/README.md
@@ -0,0 +1,23 @@
+# CleanModelContextProtocol
+
+Built on .NET 10 with Clean Architecture: `Application` owns the domain rules and use cases, `Infrastructure` owns Entity Framework Core and data access, and `Presentation` is the entry point.
+
+## Build and test
+
+```bash
+dotnet build
+dotnet test
+```
+
+## Run locally
+
+```bash
+docker compose up -d --build
+```
+
+See [docs/RUN.md](docs/RUN.md) for the local ports, `dotnet run`, the Aspire dashboard, database migrations and health checks.
+
+## Docs and coding agents
+
+- [AGENTS.md](AGENTS.md) — architecture rules, project map and the skills in `.agents/skills/` for coding agents.
+- [Template documentation](https://leanmeancleanapps.github.io/mcp/) — guides, reference pages and design decisions.
diff --git a/template/template.csproj b/template/template.csproj
index 6115447..decc9a0 100644
--- a/template/template.csproj
+++ b/template/template.csproj
@@ -41,7 +41,8 @@
-
+
+
From 83ecf817f6459a2019e7e673b734878f5c9f2a36 Mon Sep 17 00:00:00 2001
From: Stephen Walsh
Date: Sat, 7 Nov 2026 19:58:15 -0600
Subject: [PATCH 2/3] Use colons instead of dashes in the starter README
---
template/README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/template/README.md b/template/README.md
index 2f7d2bf..398603b 100644
--- a/template/README.md
+++ b/template/README.md
@@ -19,5 +19,5 @@ See [docs/RUN.md](docs/RUN.md) for the local ports, `dotnet run`, the Aspire das
## Docs and coding agents
-- [AGENTS.md](AGENTS.md) — architecture rules, project map and the skills in `.agents/skills/` for coding agents.
-- [Template documentation](https://leanmeancleanapps.github.io/mcp/) — guides, reference pages and design decisions.
+- [AGENTS.md](AGENTS.md): architecture rules, project map and the skills in `.agents/skills/` for coding agents.
+- [Template documentation](https://leanmeancleanapps.github.io/mcp/): guides, reference pages and design decisions.
From 0e4fd1e28e7d7c8beef81a4e543808ce7eab9be0 Mon Sep 17 00:00:00 2001
From: Stephen Walsh <868017+stphnwlsh@users.noreply.github.com>
Date: Sun, 8 Nov 2026 04:39:32 +0000
Subject: [PATCH 3/3] Point the starter README at what every RUN.md covers
---
template/README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/template/README.md b/template/README.md
index 398603b..35eb1e0 100644
--- a/template/README.md
+++ b/template/README.md
@@ -15,7 +15,7 @@ dotnet test
docker compose up -d --build
```
-See [docs/RUN.md](docs/RUN.md) for the local ports, `dotnet run`, the Aspire dashboard, database migrations and health checks.
+See [docs/RUN.md](docs/RUN.md) for the ports, the database and its migrations, the Aspire dashboard and the tests.
## Docs and coding agents