Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .agents/skills/template-authoring/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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.
1 change: 1 addition & 0 deletions .github/workflows/build-pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions CleanModelContextProtocol.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<File Path="global.json" />
<File Path="NuGet.config" />
<File Path="otel-collector.yaml" />
<File Path="README.md" />
</Folder>
<Folder Name="/docs/">
<File Path="docs/RUN.md" />
Expand Down
23 changes: 23 additions & 0 deletions template/README.md
Original file line number Diff line number Diff line change
@@ -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 ports, the database and its migrations, the Aspire dashboard and the tests.

## 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.
3 changes: 2 additions & 1 deletion template/template.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@
<None Include="../docs/RUN.md" Pack="true" PackagePath="content/docs/" />
<None Include="../.agents/**/*" Exclude="$(TemplateExcludes);$(RepositorySkills)" Pack="true" PackagePath="content/.agents/" />
<None Include="../AGENTS.md;../CLAUDE.md" Pack="true" PackagePath="content/" />
<!-- The small pipeline a generated solution starts with. The template's own Build Pipeline stays out. -->
<!-- The starter README and small pipeline a generated solution starts with. The template's own README and Build Pipeline stay out. -->
<None Include="README.md" Pack="true" PackagePath="content/" />
<None Include="ci.yml" Pack="true" PackagePath="content/.github/workflows/" />
<None Include="../*.slnx;../Directory.Build.props;../Directory.Packages.props;../global.json;../NuGet.config;../Dockerfile;../docker-compose.yml;../otel-collector.yaml;../.*ignore;../.editorconfig;../.gitattributes" Pack="true" PackagePath="content/" />
<None Include="../icon.png" Pack="true" PackagePath="images/" />
Expand Down
Loading