Skip to content

CODESTYLE.md carry contract is ambiguous and not derivation-neutral #175

Description

@ptr727

Surfaced while re-syncing ptr727/Utilities (a NuGet-only derived repo) against the template, per the verbatim-carry contract. Three related gaps in how CODESTYLE.md is meant to be carried by derived repos:

1. Carry/placement status is ambiguous

CODESTYLE.md is not listed under "Files and Sections Derived Repos Must Carry Verbatim", yet "Staying in Sync and Reporting Drift Upstream" says to "keep it as the full multi-language aggregate the template ships and re-sync the whole file." So is it a mandatory carry or not? And is repo-root placement load-bearing? AGENTS.md links it as ./CODESTYLE.md and .github/copilot-instructions.md links it as ../CODESTYLE.md, so a derived repo that places it elsewhere breaks those links silently.

2. Content is not derivation-neutral

The "re-sync the whole file" guidance conflicts with content that hard-codes the template's own layout:

  • Intro names NuGetLibrary/, Console/, Tests/, Benchmarks/, CodeGen/ (and the Python project). A single-project NuGet-only repo (e.g. Utilities ships only Utilities/, Sandbox/, UtilitiesTests/) cannot carry that verbatim.
  • The InternalsVisibleTo sample lists Benchmarks and Tests, project names a derived repo likely doesn't have.

3. Build-Tasks list assumes template-specific VS Code task labels/casing

The "Build Tasks" list names .Net Build, .Net Format, and .Net Outdated Upgrade. Real derived repos use different labels and casing (Utilities uses .NET Build, .NET Format, .NET Publish, Husky.Net Run, and has no .Net Outdated Upgrade), so the list cannot be carried verbatim.

Suggested fix

Either templatize the project-folder names / InternalsVisibleTo / task labels (placeholders), or explicitly reclassify CODESTYLE.md as adapt-to-repo, not verbatim and mark which sections are repo-specific. Also add it (with its placement requirement) to the verbatim-carry/derived-repo file list so its status is unambiguous.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions