Skip to content

build(repo): move the solution to the repository root - #142

Merged
mrcsin merged 1 commit into
masterfrom
solution-to-repo-root
Jul 21, 2026
Merged

build(repo): move the solution to the repository root#142
mrcsin merged 1 commit into
masterfrom
solution-to-repo-root

Conversation

@mrcsin

@mrcsin mrcsin commented Jul 21, 2026

Copy link
Copy Markdown
Member

Problem

Rider takes the solution's own directory as the project root. With SemiStep.slnx under
SemiStep/, everything above it — Docs/, Installer/, .github/, .zed/ — sat outside the
project, 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.md already claimed
with "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.slnxSemiStep.slnx, project paths prefixed with SemiStep/
  • SemiStep/.run/.run/. Rider looks for run configurations under the project root, and
    every configuration resolved $PROJECT_DIR$ as SemiStep/, so the csproj, Artifacts and
    ConfigFiles paths inside them are rebased
  • .github/workflows/ci.yml, .zed/tasks.json, CLAUDE.md, .claude/skills/make-release/SKILL.md
    follow the new solution path
  • Publish.run.xml was already broken before this change — it ran dotnet publish against
    UI/SemiStep.UI.csproj, a path that does not exist here — and 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.

Verification

From the repository root:

  • dotnet build SemiStep.slnx -c Release — 0 warnings, 0 errors
  • dotnet format SemiStep.slnx --verify-no-changes — clean
  • dotnet test SemiStep.slnx — 1444 passed, 0 failed

The IDE boundary is confirmed fixed: the MCP server now opens files under Docs/ with the
repository root as the project path, which it refused before.

Note for reviewers

.git/hooks/pre-commit is not versioned and still calls dotnet format with the old solution
path on any machine that has it installed. Update it locally after pulling.

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
mrcsin marked this pull request as ready for review July 21, 2026 15:51
@mrcsin
mrcsin merged commit 0bf1d9e into master Jul 21, 2026
1 check passed
@mrcsin
mrcsin deleted the solution-to-repo-root branch July 21, 2026 15:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant