From 2605bed9a3ea178ec8167042a5ea859c81408ca7 Mon Sep 17 00:00:00 2001
From: Stephen Walsh <868017+stphnwlsh@users.noreply.github.com>
Date: Sat, 7 Nov 2026 16:03:41 -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 +
CleanWebApi.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 4236e7b..9ff7ec8 100644
--- a/.agents/skills/template-authoring/SKILL.md
+++ b/.agents/skills/template-authoring/SKILL.md
@@ -43,7 +43,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
@@ -94,4 +94,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 ec1a777..2be9241 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/CleanWebApi.slnx b/CleanWebApi.slnx
index f13157f..1cae821 100644
--- a/CleanWebApi.slnx
+++ b/CleanWebApi.slnx
@@ -14,6 +14,7 @@
+
diff --git a/template/README.md b/template/README.md
new file mode 100644
index 0000000..027f862
--- /dev/null
+++ b/template/README.md
@@ -0,0 +1,23 @@
+# CleanWebApi
+
+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/webapi/) — guides, reference pages and design decisions.
diff --git a/template/template.csproj b/template/template.csproj
index 884ffa8..8966ba1 100644
--- a/template/template.csproj
+++ b/template/template.csproj
@@ -41,7 +41,8 @@
-
+
+
From f0a941411b3fd574183795596747b357ebc4fd7c Mon Sep 17 00:00:00 2001
From: Stephen Walsh
Date: Sat, 7 Nov 2026 19:58:17 -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 027f862..635d1ee 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/webapi/) — 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/webapi/): guides, reference pages and design decisions.
From 57aa6c85e3b1da3bcff0f77f9ec203823ab994a3 Mon Sep 17 00:00:00 2001
From: Stephen Walsh <868017+stphnwlsh@users.noreply.github.com>
Date: Sun, 8 Nov 2026 04:39:34 +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 635d1ee..7878e4a 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