build(repo): move the solution to the repository root - #142
Merged
Conversation
The .NET convention puts the solution at the repository root with the projects beneath it, and CLAUDE.md already claimed as much with "all commands run from repository root". The nested SemiStep/SemiStep.slnx came from the Visual Studio template default, not from a decision. What forced the issue: Rider takes the solution's own directory as the project root, so everything above it — Docs/, Installer/, .github/, .zed/ — sat outside the project, and the IDE's MCP server refused to open files there. Docs/plans/ is where every plan in this repository lives. .run/ moves with the solution, because Rider looks for run configurations under the project root, and every configuration resolved $PROJECT_DIR$ as SemiStep/ — the csproj, Artifacts and ConfigFiles paths inside them are rebased accordingly. Publish.run.xml was already broken before this change, running dotnet publish against UI/SemiStep.UI.csproj, a path that does not exist here; it is corrected rather than moved as-is. Directory.Build.props and Directory.Packages.props deliberately stay under SemiStep/. MSBuild resolves them upward from each csproj rather than from the solution, so the build is unaffected and the change stays minimal. Verified from the repository root: build 0 warnings 0 errors, dotnet format --verify-no-changes clean, 1444 tests passed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
mrcsin
marked this pull request as ready for review
July 21, 2026 15:51
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Rider takes the solution's own directory as the project root. With
SemiStep.slnxunderSemiStep/, everything above it —Docs/,Installer/,.github/,.zed/— sat outside theproject, and the IDE's MCP server enforces that boundary. It refused to open files under
Docs/plans/, which is where every plan in this repository lives.Underneath that, the layout did not match the .NET convention: the solution belongs at the
repository root with the projects beneath it, which is also what
CLAUDE.mdalready claimedwith "all commands run from repository root". The nested form came from the Visual Studio
template default rather than from a decision.
What changed
SemiStep/SemiStep.slnx→SemiStep.slnx, project paths prefixed withSemiStep/SemiStep/.run/→.run/. Rider looks for run configurations under the project root, andevery configuration resolved
$PROJECT_DIR$asSemiStep/, so the csproj,ArtifactsandConfigFilespaths inside them are rebased.github/workflows/ci.yml,.zed/tasks.json,CLAUDE.md,.claude/skills/make-release/SKILL.mdfollow the new solution path
Publish.run.xmlwas already broken before this change — it randotnet publishagainstUI/SemiStep.UI.csproj, a path that does not exist here — and is corrected rather than movedas-is
Directory.Build.propsandDirectory.Packages.propsdeliberately stay underSemiStep/.MSBuild resolves them upward from each csproj rather than from the solution, so the build is
unaffected and the change stays minimal.
Verification
From the repository root:
dotnet build SemiStep.slnx -c Release— 0 warnings, 0 errorsdotnet format SemiStep.slnx --verify-no-changes— cleandotnet test SemiStep.slnx— 1444 passed, 0 failedThe IDE boundary is confirmed fixed: the MCP server now opens files under
Docs/with therepository root as the project path, which it refused before.
Note for reviewers
.git/hooks/pre-commitis not versioned and still callsdotnet formatwith the old solutionpath on any machine that has it installed. Update it locally after pulling.