Skip to content

Roadmap: an exemplary, current .NET starter #167

@devantler

Description

@devantler

🤖 Generated by the Daily AI Assistant

Roadmap: an exemplary, current .NET starter

dotnet-template's first strategy review (it had no roadmap, roadmap label, or milestones before this). The goal of this repo is to be the clean baseline every new devantler-tech .NET project starts from — minimal, idiomatic, current. It is already in good shape on the things that matter most:

  • It is a GitHub template repository (isTemplate: true), so the "Use this template" button works.
  • It ships a real example + test (src/Example/ExampleClass.cs + tests/Example.Tests/ExampleClassTests.cs) — the thing its sibling go-template still lacks (go-template#69).
  • House defaults are wired up in both projects: Nullable, ImplicitUsings, AnalysisMode=All, EnforceCodeStyleInBuild, TreatWarningsAsErrors, GenerateDocumentationFile.
  • AI-maintenance conventions are in place (AGENTS.md + CLAUDE.md + .claude/), PRs are validated by the org-required reusable workflow (not a repo-local caller), and publishing runs through the reusable publish-dotnet-library workflow on v* tags.

This roadmap captures the small, high-value gaps between "a working repo" and "a polished starter someone reaches for." The bias stays minimal, idiomatic, current — no product features (per the template's AGENTS.md).

Theme & directions

  1. Current toolchain — the projects target net9.0. .NET 9 is STS and its support window ends ~May 2026; .NET 10 is the current LTS (released Nov 2025). A starter for new projects should target the current LTS. → Bump target framework net9.0 → net10.0 (current LTS) #168
  2. Accurate, helpful docs — the README frames the repo as a NuGet package to dotnet add package rather than a template to use; its Test badge points to a non-existent test.yaml workflow; and it doesn't mention the bundled house defaults, the validation model, the release/publish flow, or the AI-maintenance setup. → Fix and enrich the README (template framing + accurate badges) #169
  3. Exemplary by exampleExampleClass is empty and ExampleClassTests.Test1 only asserts the constructed instance is non-null, so the scaffold models no real behaviour or test-naming convention for a new project to copy. → Make the example exemplary (model the house testing pattern) #170

Cross-cutting lens — parity with go-template

The two templates should align where it makes sense (per the templates product card). Today dotnet-template is ahead of go-template on the two biggest items — it is already a template repo and already ships an example+test (go-template#67 tracks closing those gaps on the Go side). The remaining shared theme is "current + polished docs" (directions 1 and 2 here mirror go-template#70). Other per-ecosystem differences (dotnet has CODEOWNERS, renovate.json; go uses dependabot.yaml + .golangci.yml/.mega-linter.yml + cspell.json) are mostly deliberate, not gaps.

Tracked elsewhere / watch (not children of this epic)

  • Codecov → GitHub-native coverage. The README still carries a Codecov badge + token. The Codecov → GitHub-native Code Quality coverage migration is a portfolio-wide effort driven centrally (public Go + .NET in scope); the consumer-side README/badge update here should follow that work rather than be done independently.
  • xUnit v2 → v3. The test project uses xunit 2.9.3; xunit.v3 is available. xUnit v2 is still mainstream and stable — revisit only when there's a clear reason, not as currency churn.
  • Empty .pre-commit-config.yaml (repos: []). Prepared but unused; either populate with a useful hook (e.g. dotnet format) or drop it. Minor hygiene, not roadmap-worthy on its own.

Explicitly out of scope (deliberate, not gaps)

  • No repo-local test/validate workflow caller — PR validation runs via the org-required Require workflows ruleset (the reusable .NET validation workflow from devantler-tech/reusable-workflows); ci.yaml is only a required-checks aggregator. The scaffold is validated; a local caller is unnecessary.
  • No product features — this is a scaffold; keep it empty and idiomatic.

Size

Whole roadmap is S — three small, independently shippable children (#168 is the headline; #169 and #170 are good first issue-grade).

Metadata

Metadata

Assignees

No one assigned

    Labels

    roadmapStrategic roadmap item

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions