Scaffold gui-cs/cli to Editor-style .NET 10 library layout with CI/release workflows#1
Conversation
Agent-Logs-Url: https://github.com/gui-cs/cli/sessions/4c1f22cc-0f5c-44d7-8fc5-484cb4a2e190 Co-authored-by: tig <585482+tig@users.noreply.github.com>
gui-cs/cli to Editor-style .NET 10 library layout with CI/release workflows
tig
left a comment
There was a problem hiding this comment.
Review: gui-cs/cli PR #1 ? Scaffold
Overall: Good scaffolding. A few issues to fix before merge.
Issues:
1. Test projects use wrong xUnit v3 pattern
The test .csprojs include Microsoft.NET.Test.Sdk and xunit.runner.visualstudio ? that is the xUnit v2/dotnet-test pattern. For xUnit v3 executable tests (which is what clet and Editor use), you only need:
<PackageReference Include="xunit.v3" Version="3.2.2" />Remove Microsoft.NET.Test.Sdk and xunit.runner.visualstudio. The test projects are already <OutputType>Exe</OutputType> which is correct for xUnit v3 self-hosted runners (dotnet run --project). The extra packages will cause conflicts.
2. Missing LICENSE and README.md
Directory.Build.props references LICENSE and README.md for packaging (<None Include="..." Pack="true" />), and the solution file lists them in /Docs/. But neither file exists in the PR. The build will warn or fail on pack. Add at minimum a placeholder MIT LICENSE file and a stub README.
3. Constitution is too thin
The constitution should include the Terminal.Gui.Cli-specific rules from the spec (C1-C8):
- C1: Only CliHost calls TG lifecycle APIs
- C2: Public API changes require spec update
- C3: No reflection-based command discovery
- C4: Source-generated JSON only
- C5: Tests run in parallel (no process-global mutation)
- C6: Commands never call Environment.Exit
- C7: Schema v1 is append-only
- C8: Zero warnings
The current version is generic project-management boilerplate. It should be the engineering authority document per the spec.
4. CLAUDE.md should reference constitution and coding conventions
The clet CLAUDE.md is much more detailed ? it documents space-before-parens, file-scoped namespaces, always-braces, early returns, one-type-per-file, etc. The scaffolded one just says "follow .editorconfig" which misses the non-enforceable conventions. At minimum add the key style rules or say "see specs/constitution.md" once that is fleshed out.
5. CI workflow missing: --configuration on test steps
CI builds in Debug (no -c flag), but test steps use --no-build. This works. However, the release workflow builds Release and tests with --no-build -c Release. The CI workflow should probably also pass -c Debug explicitly to be clear, or at minimum match its build and test configurations.
6. .gitignore is minimal
Missing common entries: packages/, publish/, *.nupkg, .idea/, *.DotSettings.user, launchSettings.json. Not blocking but worth adding.
Looks good:
- .editorconfig ? correct space-before-parens rules including ReSharper hints
- Directory.Build.props ? Version, TerminalGuiVersion pin, TreatWarningsAsErrors all correct
- Solution file ? modern .slnx format, correct project paths, doc/settings folders
- Workflow structure ? all 4 workflows present (ci, release, prepare-release, finalize-release)
- AssemblyInfo.cs ? InternalsVisibleTo for all 3 test projects
- Library csproj ? IsAotCompatible, correct PackageReference to Terminal.Gui via property
- ExampleApp ? ProjectReference to library, IsPackable=false
Verdict: Request changes (items 1-3 are blocking; 4-6 are nice-to-have).
Agent-Logs-Url: https://github.com/gui-cs/cli/sessions/b520bf30-f8e0-499a-a397-5fd73783d345 Co-authored-by: tig <585482+tig@users.noreply.github.com>
Implemented in 9422945.
Also confirmed root |
This PR bootstraps
gui-cs/clito match the structural conventions used ingui-cs/Editor, establishing a clean starting point forTerminal.Gui.Cli(net10.0) without introducing library implementation code.Repository scaffolding (Editor-aligned)
.editorconfig,Directory.Build.props, andDirectory.Build.targets.Terminal.Gui.Cli, including:Version = 0.1.0-developTerminalGuiVersion = 2.4.1-develop.11CLAUDE.md,AGENTS.md, andspecs/constitution.mdadapted for this repository.GitHub Actions workflows
ci.ymlwith OS matrix (ubuntu,macos,windows) for restore/build/format/test.release.ymlfor:developpushes (computed prerelease version)v*tags (tag-derived version)prepare-release.ymlfor manual release branch + release PR creation.finalize-release.ymlfor merged release PR handling (tag, GitHub Release, back-merge PR).Solution and project skeleton
Terminal.Gui.Cli.slnx.src/Terminal.Gui.Cli/Terminal.Gui.Cli.csprojPackageId/Namespace = Terminal.Gui.CliTargetFramework = net10.0IsAotCompatible = truePackageReferencetoTerminal.Guisrc/Terminal.Gui.Cli/Properties/AssemblyInfo.cstests/Terminal.Gui.Cli.Teststests/Terminal.Gui.Cli.IntegrationTeststests/Terminal.Gui.Cli.SmokeTestsexamples/Terminal.Gui.Cli.ExampleApp(console app with project reference to library)Example scaffold from the new shared props:
Original prompt